> E2P/src : : (: 2 AS SPACE IS SHORT WHEN < USING DISCS, THE CODE IS F ASSEMBLED INTO SCREEN P MEMORY BEFORE SAVING. Z: d6:28,0,24,39,12 n: xrgX=&F0:txt=&F2:rpl=&F4 blk=&96:num=&98:tmp=&99 cmd=&9A : U%=&2800:V%=&6500:=V% A%=U%:B%=U% I=462 O%=V%:P%=U% [OPT I JMP cold : .cod400 JMP warm JMP esc  JMP instr  .osjmp JMP osrdch ": , .pload 6 LDA (0),Y @ INC 0 JBNE pload2 T INC 1 ^: h .pload2 r STA &FCE5 |:  LDY #7  .delay DEY  BNE delay RTS :  .codld  LDX #&C  .codld5 LDA cod400-1,X STA &3FF,X DEX BNE codld5 RTS :  .osrdch & JSR &FFE0 0 .osrd1 :JSR regso2 D .osret N LDA #0 X STA &8013 b .anrts lRTS v:  .oscli  JSR datin  JSR &FFF7  JMP osret :  .osbyte JSR regsin  JSR &FFF4 JSR regsout  JMP osret :  .osword  LDA &8016  BNE oswd5  JSR datin  STX 0  STY 1 *TXA 4TAY > JSR &FFF1 HJSR regso3 R JSR osret \ BCS anrts fJMP txtout p: z .oswd5  LDY #&20 JSR datin1  LDX #&20  LDY #0  LDA &8016  JSR &FFF1  JSR osret JSR regsin JMP blkout2 :  .osargs  JSR datin JSR regsi1  JSR &FFDA  JSR osrd1 JMP blkout $: . .osbget 8JSR regsi1 B JSR &FFD7 L JMP osrd1 V: ` .osbput jJSR regsi1 t JSR &FFD4 ~ JMP osret :  .osfind JSR regsi1  BEQ osf5 PHA  JSR datin PLA  .osf5  JSR &FFCE  JMP osrd1 :  .osfile  JSR datin  JSR datin  STX 0  STY 1 ( LDY #0 2 LDA &8016 < JSR &FFDD F JSR osrd1 P LDX #&12 Z LDY #2 dJMP blkout2 n: x .osgbpb  JSR datin  LDY #0  LDA &8016  JSR &FFD1  JSR osrd1  LDX #&D JMP blkout1 :  .cold SEI  LDA #&40  STA &D00  LDA #&AA  LDX #0  LDY #&FF  JSR &FFF4 " STX &F6 , STY &F7 6: @ LDX &F4 J LDY #7 T .cold1 ^TYA hJSR sidesel r LDA &8000 | CMP &8100  BNE cold5  #&FF  STA &8000  CMP &8100 PHP  #&FF  STA &8000 PLP  BEQ cold7 :  .cold5 DEY  BPL cold1 TXA JSR sidesel BRK &BRK 0EQUS "No E2P" :BRK D: N .coldvec XEQUW tclear b: l .cold7 vSTY thisROM LDA (&F6),Y BEQ cold10  CMP &8006 BEQ cold16 :  .cold10  LDX #0  .cold11 LDA &8000,X INX BNE cold11 :  .cold12  LDA B%,X  STA &8000,X INX  BNE cold12 * LDA &FCE5 4: > .cold15 HLDA &8000,X RINX \BNE cold15 f LDA &800D pBNE cold15 z:  .cold16 LDX #coldvec 256 LDY #coldvec 256  LDA #1  JSR instr : LDA #C% 256:STA 0 LDA #C% 256:STA 1  LDY #0 STY langflg :  .cold17  JSR pload  LDA 0 CMP #D% 256 BNE cold17 $ LDA 1 .CMP #D% 256 8BNE cold17 BJMP (&FFFC) L: V .message1 ` EQUB &D jEQUS "E2P 0.10" t EQUB &D ~ EQUB 0 : .message2 EQUS "SECOND PROCESSOR" EQUB &D EQUB &D EQUB 0 : .prnmes LDX #0 .prnmes2 LDA message1,X BEQ prnmes5 JSR &FFE3 INX BNE prnmes2  .prnmes5 (RTS 2: < .Rserv FCPX thisROM PBNE Rserv3 Z: d CMP #9 nBNE Rserv2 x BIT isec BPL Rserv2 JSR prnmes2 LDA #9 : .Rserv2 CMP #&FE .Rserv3 BNE Rserv15 : TYA PHA JSR &FFE7 LDA #&A6  LDX #0  LDY #&FF  JSR &FFF4 " STX &1D , STY &1E 6: @ LDA &20B JCMP #newosb 256 TBEQ Rserv5 ^STA oldosb+1 hLDA &20A:STA oldosb+0 rLDA #newosb 256:STA &20B |LDA #newosb 256:STA &20A : .Rserv5 LDA #&7A JSR &FFF4 LDY #0 STY isec CPX #&64 BNE Rserv7 LDA #&78 JSR &FFF4 JMP Rserv10 : .Rserv7  JSR codld  LDA #&FF  STA isec & LDY #&EA 0STA (&1D),Y : JSR pcomm D: NLDA #brk 256:STA &202 XLDA #brk 256:STA &203 bLDA #event 256:STA &220 lLDA #event 256:STA &221 v: LDA #&14 LDX #6 JSR &FFF4 LDA #&80 STA &14 : LDX #message2-message1 JSR prnmes2 : .Rserv10 PLA TAY LDA #0  .Rserv15 LDX &F4 RTS : * .newosb 4 CMP #&84 >BEQ newosb2 H CMP #&85 RBNE newosb5 \ .newosb2 fLDX #A% 256 pLDY #A% 256 zRTS : .newosb5 CMP #&C8 BNE newosb7 TXA #&FD TAX LDA #&C8 .newosb7 JMP (oldosb) : .pcomm STA &800D  .pstat NOP NOP $ LDA &800D . BNE pstat 8RTS B: L .pselect VLDA thisROM `JSR sidesel j JMP pstat t: ~ .sidesel  STA &F4  LDA #&C  STA &FE05  LDA &F4  STA &FE05 RTS :  .instr  CMP #&80 BCC instr4  CMP #&C0 BCC instr3  ASL &14  BCS instr1  CMP &15 BEQ instr2 (CLC 2RTS < .instr1 F STA &15 P .instr2 ZRTS d .instr3 n A #&40 x CMP &15 BNE instr2  LDA #&80  STA &14  LDA #&20 :  .instr4 PHP SEI  STY &13  STX &12  STA &16  LDA &F4 PHA JSR pselect :  LDY #1 " .instr5 ,LDA (&12),Y 6STA &8010,Y @DEY JBPL instr5 T: ^ LDY &13 h LDA &16 r A #8 | .instr7  JSR pcomm PLA JSR sidesel  LDA &16  CMP #4 BNE instr9 :  .instr8  LDA #&80  STA &14  JMP main  .instr9 PLP RTS : .esc &PHP 0SEI : LDA &F4 DPHA NJSR pselect X LDA &FF b STA &8010 l LDA #&C0 v STA &16 BNE instr7 :  .event  STA &19 PHP  LDA &F4 PHA JSR pselect  STX &800E  STY &800F  LDA &19  STA &8010  LDA #&40  JSR pcomm  PLA JSR sidesel  LDA &19 *PLP 4RTS >: H .warm RCLI \ LDY #0 f STY 0 p STY &17 z LDA #&80  STA 1  STA &18  LDA #&20  &8006  BEQ warm2 :  LDX &8007  .warm1 INX LDA &8000,X  BNE warm1 LDA &8001,X  STA &17 LDA &8002,X  STA &18 : $ .warm2 . BCS warm4 8BIT langflg B BPL warm4 L LDY #&FD VLDA (&1D),Y `BEQ warm99 j .warm4 t LDA &F4 ~ CMP #&C  BNE warm5  JMP &8000 :  .warm5  LDA #1 JSR warm100  .warm7  JSR pload  BIT 1 BVS warm12 :  .warm10  LDA 0  CLC  ADC &17  LDA 1 ( ADC &18 2 CMP #&F8 < BCC warm7 F: P .warm12 Z LDA #&FF dSTA langflg n .warm99 x LDA #4 :  .warm100 PHA  .warm110  LDA #&FF  JSR instr BCC warm110 PLA  LDX #&17  LDY #0  JMP instr :  .regsout  STY &8018  .regso1  STX &8017 " .regso2 , STA &8016 6 .regso3 @ ROL A J STA &8015 T ROR A ^RTS h: r .regsin | LDX &8017  .regsi1  LDY &8018  LDA &8016 RTS :  .datin  LDY #0  .datin1  LDX #0  .datin2  BIT &8019 BVC datin5 BMI datin9  LDA &801A STA &700,Y BVS datin7 &: 0 .datin5 :BPL datin2 D CPY #&12 NBCC datin6 X CPY #&20 bBCC datin7 l CPY #&70 vBCS datin7 :  .datin6  LDA &801A  STA 0,Y  .datin7 CLV  .datin9  STX &8019 INY BVC datin2  LDY #7 RTS :  .blkout  LDX #4  .blkout1  LDY #0 * .blkout2 4 STX &1A > .blkout3 H LDX #&80 R .blkout5 \ CPY &1A fBEQ txtout5 p LDA 0,Y zJSR datout INY BNE blkout5 :  .txtout  LDX #&40  LDY #0  .txtout2 LDA &700,Y JSR datout INY  CMP #&D BNE txtout2  .txtout5  LDX #&C0 :  .datout $NOP .NOP 8 BIT &801B BBVS datout LBMI datout V STA &801C ` STX &801B jRTS t: ~.brk  LDY #&FF  .brk2 INY LDA (&FD),Y  STA &20,Y TAX  BNE brk2 TYA  BEQ brk2 INY  STY &1A  LDY #&20 JSR pselect  LDA #&80  JSR pcomm JSR blkout3 (: 2 .main < LDX #&FF FTXS P .main2 ZSEI dLDA thisROM nJSR sidesel xCLI  .main3  LDX &8014  BEQ main4  STX &801D  LDA #0  STA &8014 :  .main4  LDX &801D  CPX &801E  BEQ main9 : INX CPX #vduend 256  BCC main7 LDX #vdustart 256 " .main7 ,LDA &8000,X 6 STX &801D @ JSR &FFEE J JMP main3 T: ^ .main9 h LDA &8013 r BEQ main2 |:  LDX &801D  CPX &801E  BNE main3 : STA osjmp-cod400+&401 JSR osjmp-cod400+&400  JMP main ] B%=O%-V%+U%  P%=&FF00 vdustart=&FF1F "[OPT I \ 2P Client code  JMP warm  JMP Rserv  EQUB &82  EQUB 8 & EQUB 0 0EQUS "(C)" : EQUB 0 D EQUB &FF N: X .reset b LDX #&FF lTXS v .reset2 LDA refresh-&FF,X  .reset4 %STA &FB00,X \ Copy refresh code STA &FA80,X DEX  CMP #&C9 BNE reset2 DEX BMI reset4 LDA #hostcmd7 256 "STA &FFFC \ Redirect Reset BNE hostcmd7 :  CMP #0  LDA cycle+1  #&80  STA cycle+1 *$LDA &FF0D \ Get host command 4$CMP cmd \ Check if changed > STA cmd H .refresh RRTS \".vduend \ End of queue f: p*.irq \ Called by &FEE5 access zPHA LDA &FEE5 \ Get byte  .ivec "STA &200 \ Store or fetch STA &FEE5 \ Send byte "INC ivec+1 \ Update address BNE irqexit INC ivec+2  .irqexit PLA  .anrti RTI :  .cycle  JSR &FB00 BEQ cycle5 \ No change  A #0 $ .cycle5 .RTS 8: B$.nmi \ Called every 1ms LPHA VJSR cycle \ Refresh RAM `#BEQ irqexit \ No host command j: t .hostcmd ~ CMP #9 #BCC hostcmd2 \ cmd=8, save mem BNE hostcmd10 \ cmd<>9 #LDA #&8D \ cmd=9, load mem BNE hostcmd4 \ opcode=STA :  .hostcmd2 LDA #&AD \ opcode=LDA  .hostcmd4  STA ivec $LDA &FF10 \ Get transfer add STA ivec+1  LDA &FF11 STA ivec+2  : LDA #irq 256 "STA &FFFE \ Set IRQ vector (LDA #anrti 256 2STA &FFFA \ Ignore NMIs <BCS hostcmd6 F BRK \ Trigger P->H PNOP Z: d .hostcmd6 nCLI x .hostcmd7  LDA #0  STA &FF0D  .hostcmd8  JSR cycle #BNE hostcmd \ Process command BEQ hostcmd8 \ Loop back .hostcmd10 JMP hostcmd12 :  .regsin10  LDY &FF18  .regsin11  LDX &FF17  .regsin12  LDA &FF15  ROR A " LDA &FF16 ,RTS 6: @ .irq5 J STA &FC TPLA ^ A #4 hPHA r #&10 |!BEQ irq7 \ Not BRK, exit : TXA PHA TSX LDA &103,X \ Pop address CLD SEC  SBC #1  STA &FD LDA &104,X  SBC #0  STA &FE PLA TAX  LDA &FC  JMP (&202) \ Jump to BRKV & .irq7 0 LDA &FC :RTI D: N .evjmp XJMP (&220) b: lJMP (&21C) vJMP (&21A) JMP (&218) JMP (&216) JMP (&214) JMP (&212) JMP (&210) CMP #&D BNE &FFEE LDA #&A JSR &FFEE LDA #&D JMP (&20E) JMP (&20C) JMP (&20A) !JMP (&208) ! EQUW anrti !EQUW reset ! EQUW anrti !*] !4C%=O%-V%+U% !> P%=&F800 !H [OPT I !R .tclear !\!LDA &FF1E \ Clear queue !f STA &FF14 !p LDA #0 !z!STA &FF13 \ Clear command ! STA &FF19 \ Clear status ! STA &FF1B \ Clear status !: ! .tclear10 !LDA #irq5 256 ! STA &FFFE !LDA #nmi 256 ! STA &FFFA !: ! .tclear20 ! LDA #0 ! STA &FF0D !RTS ": ".hostcmd12 " CMP #&C "$BNE hostcmd15 \ Not execute ". LDX #&FF "8TXS \ Reset stack "BLDA &FF11 \ Get address "LPHA "VSTA osbtab+2 \ Set memtop "`STA osbtab+3 "j LDA &FF10 "tPHA "~SEI "PHP "JSR tclear " LDA #1 "!RTI \ Jump to code ": ".hostcmd15 " CMP #&28 "BEQ hostcmd92 \ Start/stop "BCC hostcmd92 ": " CMP #&FF "BNE hostcmd20 \ Not reset #TAX # TXS \ Clear stack #INX # STX &FF #( LDX #&23 #2"STX &FF1E \ Clear queue #<.hostcmd17 #F!LDA vectab,X \ Init vectors #PSTA &200,X #ZDEX #dBPL hostcmd17 #n: #x.hostcmd18A #JSR tclear #.hostcmd18 #%JMP hostcmd18 \ Wait for NMI/IRQ #: #.hostcmd20 # CMP #&C0 #BNE hostcmd25 \ Not escape # LDA &FF10 #STA &FF \ Set escflg #"BMI hostcmd92 \ Clear queue #: #.hostcmd90 # LDA &FFFA $CMP #anrti 256 $BNE hostcmd95 $JMP hostcmd7 $": $,.hostcmd92 $6JSR tclear10 $@PLA $JRTI $T: $^.hostcmd95 $hJSR tclear20 $rPLA $|RTI $: $.hostcmd25 $ CMP #&40 $BNE hostcmd30 \ Not event $TXA $PHA $TYA $PHA $LDX &FF0E \ Get regs $ LDY &FF0F $ LDA &FF10 $ JSR evjmp $PLA %TAY %PLA %TAX %&JMP hostcmd90 %0: %:.hostcmd30 \ Host BRK %DTXA %NPLA %XPHA %bPHA %lJSR tclear %v LDX #0 % STX &FD % LDY #&FD % STY &FE %JSR datin10 %PLA %TAY %PLA %TAX %PLA % STA &FC %JMP (&202) %: % .rdch &LDA #osrdch 256 & JSR oscomm &JMP regsin12 & : &*.cli &4LDA #oscli 256 &> STA &FF13 &HJSR txtout10 &RJMP osstat &\: &f .byte &p CMP #&82 &zBCC byte15 & CMP #&86 &BCS byte15 &TAX &LDY osbtab-&82,X & LDX #0 & .anrts &RTS &: & .osbtab & EQUB 0 & EQUB 8 & EQUB &80 & EQUB &80 ': ' .byte15 ' CMP #&DA '$BNE byte20 '.TXA '8BNE byte18 'BTYA 'LBNE byte18 'V LDA &FF1E '` STA &FF14 'j .byte18 't LDA #&DA '~ .byte20 'JSR regso10 'LDA #osbyte 256 'JSR oscomm 'JMP regsin10 ': ' .word ' STA &FF16 'LDA #osword 256 ' STA &FF13 ' LDA &FF16 'BNE oswd15 ' LDA #5 (JSR blkout10 ( JSR osstat (JSR regsin12 ( BCS anrts (( LDY #0 (2LDA (blk),Y (<TAX (FINY (PLDA (blk),Y (ZTAY (dJMP datin10 (n: (x .oswd15 ( STX rgX ( CMP #&E (BCC oswd17 ( LDA #&E (: ( .oswd17 (TAX (LDA oswifrm-1,X ( STA &FF18 (LDA oswito-1,X ( STA &FF17 (LDA oswoto-1,X ( LDX rgX )JSR blkout10 )JSR osstat ) LDA &FF18 )" #&1F ),JSR datin11 )6JMP blkout19 )@: )J .args )TJSR regso10 )^LDA #osargs 256 )h STA &FF13 )r LDY #0 )| LDA #4 )CLD )JSR blkout10 )JSR osstat )JSR datin10 )JMP regsin10 ): ) .bget ) STY &FF18 )LDA #osbget 256 ) .bget12 )JSR oscomm )JMP regsin12 ): * .bput *JSR regso11 *LDA #osbput 256 *&BNE bget12 *0: *: .find *DJSR regso10 *NPHA *XLDA #osfind 256 *b STA &FF13 *lPLA *vBEQ find20 *JSR txtout10 *: * .find20 *JSR osstat *JMP regsin10 *: * .file * STA &FF16 *LDA #osfile 256 * STA &FF13 * LDA #&12 *JSR blkout10 * LDY #0 +LDA (blk),Y + TAX +INY + LDA (blk),Y +*TAY +4JSR txtout10 +>JSR osstat +H LDX blk +R LDY blk+1 +\ LDA #2 +f .file15 +pJSR datin11 +z LDX blk + LDY blk+1 +JMP regsin12 +: + .gbpb + STA &FF16 +LDA #osgbpb 256 + STA &FF13 + LDA #&D +JSR blkout10 +JSR osstat +CLD + LDA #0 +BEQ file15 ,: , .oscomm , STA &FF13 ,$ .osstat ,. LDA &FF13 ,8BNE osstat ,BRTS ,L: ,V .regso10 ,` STX &FF17 ,j .regso11 ,t STY &FF18 ,~ STA &FF16 ,RTS ,: , .txtout10 , STX txt , STY txt+1 , LDX #&40 , LDY #0 , .txtout12 ,LDA (txt),Y ,JSR datout10 ,INY , CMP #&D -BNE txtout12 - .txtout15 - LDX #&C0 -: -( .datout10 -2 BIT &FF19 -<BVS datout10 -FBMI datout10 -P STA &FF1A -Z STX &FF19 -d .datout15 -nRTS -x: - .blkout10 - STA num - .blkout11 - STX blk - STY blk+1 - LDX #&80 - LDY #0 - .blkout15 - CPY num -BEQ blkout17 -LDA (blk),Y -JSR datout10 -INY .BNE blkout15 .: . .blkout17 ."JSR txtout15 ., .blkout19 .6 LDX blk .@ LDY blk+1 .JRTS .T: .^ .datin10 .h LDA #0 .r .datin11 .| STX rpl . STY rpl+1 .TAY . LDX #0 . .datin12 . BIT &FF1B .BVC datin15 .BMI datin19 .BPL datin17 .: . .datin15 .BPL datin12 . .datin17 . LDA &FF1C /STA (blk),Y /CLV /: /& .datin19 /0 STX &FF1B /:INY /DBVC datin12 /NRTS /X: /b .wrch /l STX tmp /v LDX &FF1E /INX /CPX #vduend 256 /BCC wrch15 /LDX #vdustart 256 / .wrch15 / CPX &FF1D /BEQ wrch15 /: /STA &FF00,X / STX &FF1E / LDX tmp /RTS /: 0 .oswoto 0 EQUB 0 0 EQUB 5 0 EQUB 0 0* EQUB 5 04 EQUB 4 0> EQUB 5 0H EQUB 8 0R EQUB &E 0\ EQUB 4 0f EQUB 1 0p EQUB 1 0z EQUB 5 0 EQUB 0 0 EQUB &10 0: 0 .oswifrm 0 EQUB &20 0 EQUB &20 0 EQUB &20 0 EQUB &20 0 EQUB &24 0 EQUB &20 0 EQUB &20 0 EQUB &20 0 EQUB &24 1 EQUB &21 1 EQUB &21 1 EQUB &20 1$ EQUB &20 1. EQUB &20 18: 1B .oswito 1L EQUB &25 1V EQUB &20 1` EQUB &25 1j EQUB &20 1t EQUB &25 1~ EQUB &20 1 EQUB &20 1 EQUB &20 1 EQUB &25 1 EQUB &29 1 EQUB &25 1 EQUB &20 1 EQUB &28 1 EQUB &30 1: 1 .vectab 1EQUW anrts 1EQUW hostcmd18A 2 EQUW irq7 2 EQUW irq7 2 EQUW cli 2 EQUW byte 2( EQUW word 22 EQUW wrch 2< EQUW rdch 2F EQUW file 2P EQUW args 2Z EQUW bget 2d EQUW bput 2n EQUW gbpb 2x EQUW find 2EQUW anrts 2EQUW anrts 2EQUW anrts 2: 2] 2D%=O%-V%+U% 2 P%=D% 2 [OPT I 2 .langflg 2 EQUB 0 2 .isec 2 EQUB 0 2 .oldosb 3 EQUW 0 3 .thisROM 3 EQUB 0 3"] 3, 36"IF YOU ARE USING TAPES," 3@/"INSERT CASSETTE THAT WILL HOLD RUN CODE." 3JF"SAVE E2PCODE FFFF"+~V%+" +"+~(D%-A%)+" FFFF"+~U%+" FFFF"+~U% 3T 26: