8004 org $8004 8004 ?? ?? ?? PIA2: rmb 4 8008 ?? ?? ACIA: rmb 2 8010 org $8010 8010 ?? ?? ?? PIA1: rmb 4 A7B5 org $A7B5 A7B5 ?? STACK: rmb 1 A7B6 ?? ?? PORT: rmb 2 A7B8 ?? ?? SAVEX: rmb 2 A7BA ?? ?? INDEX: rmb 2 A7BC ?? OUTSW: rmb 1 A7BD ?? LENGTH: rmb 1 A7BE ?? ?? SWIV: rmb 2 A7C0 ?? ?? IRQV: rmb 2 A7C2 ?? ?? NMIV: rmb 2 A7C4 ?? CHSM: rmb 1 A7C5 ?? ?? SPD: rmb 2 A7C7 ?? ?? ACTADD: rmb 2 A7C9 ?? MCONT: rmb 1 A7CA ?? BCONT: rmb 1 A7CB ?? ?? BEGA: rmb 2 A7CD ?? ?? ENDA: rmb 2 A7CF ?? HDRSW: rmb 1 A7D0 ?? ?? ?? HEADER: rmb 3 A7D3 ?? ?? ??+BPTBL: rmb $2D A800 ?? ENDBPT: rmb 1 F800 org $F800 F800 START: F800 0E cli F801 CE FB 8F ldx #SWIR F804 FF A7 BE stx SWIV F807 ; IRQ+NMI processing F807 CE FC 76 ldx #SSLOOP F80A FF A7 C0 stx IRQV F80D FF A7 C2 stx NMIV F810 ; PIA+ACIA initialization F810 CE 80 10 ldx #PIA1 F813 6F 02 clr 2,x F815 6F 03 clr 3,x F817 86 0F ldaa #$F F819 A7 01 staa 1,x F81B 86 FF ldaa #$FF F81D A7 00 staa 0,x F81F 4A deca F820 A7 02 staa 2,x F822 A7 03 staa 3,x F824 CE 80 04 ldx #PIA2 F827 FF A7 B6 stx PORT F82A 4F clra F82B A7 02 staa 2,x F82D A7 03 staa 3,x F82F A7 01 staa 1,x F831 4A deca F832 A7 00 staa 0,x F834 4A deca F835 A7 02 staa 2,x F837 A7 03 staa 3,x F839 CE 80 08 ldx #ACIA F83C 86 03 ldaa #3 F83E A7 00 staa 0,x F840 ; preset output format F840 86 18 ldaa #24 F842 B7 A7 BD staa LENGTH F845 ; clear screen and breakpoint table F845 ; start of main control loop F845 8E A7 B5 lds #STACK F848 7F A7 BC clr OUTSW F84B 86 0C ldaa #$C F84D BD F9 D1 jsr OUTPUT F850 FE FF D6 ldx NORMAL F853 FF A7 C5 stx SPD F856 7E FA F0 jmp GOTOK1 F859 ; output speed control F859 SPEED1: F859 36 psha F85A 20 07 bra SPD2 F85C SPEED: F85C FF A7 B8 stx SAVEX F85F 36 psha F860 SPD1: F860 BD F9 65 jsr TEST F863 SPD2: F863 CE FF C9 ldx #SPDTBL F866 TSTSPD: F866 A1 00 cmpa 0,x F868 26 07 bne OTHER F86A EE 01 ldx 1,x F86C FF A7 C5 stx SPD F86F 20 08 bra SPDOUT F871 OTHER: F871 08 inx F872 08 inx F873 08 inx F874 8C FF E7 cpx #SWI ; SPDEND F877 26 ED bne TSTSPD F879 SPDOUT: F879 FE A7 C5 ldx SPD F87C 27 E2 beq SPD1 F87E FE A7 B8 ldx SAVEX F881 32 pula F882 39 rts F883 ; display keyboard and display multiplexor F883 DISP: F883 4F clra F884 CE A7 C7 ldx #ACTADD F887 GOON: F887 C6 FF ldab #$FF F889 F7 80 10 stab PIA1 F88C B7 80 11 staa PIA1+1 F88F 8D 25 bsr TSTKEY F891 26 13 bne KPSH F893 E6 00 ldab 0,x F895 F7 80 10 stab PIA1 F898 8D 23 bsr DEL F89A 08 inx F89B 4C inca F89C 81 08 cmpa #8 F89E 26 E7 bne GOON F8A0 86 FF ldaa #$FF F8A2 B7 80 10 staa PIA1 F8A5 39 rts F8A6 ; wait for key release F8A6 KPSH: F8A6 1B aba F8A7 C6 FF ldab #$FF F8A9 F7 80 10 stab PIA1 F8AC B7 A7 CF staa HDRSW F8AF KPSH1: F8AF 8D 0C bsr DEL F8B1 8D 03 bsr TSTKEY F8B3 26 FA bne KPSH1 F8B5 39 rts F8B6 ; query keyboard F8B6 TSTKEY: F8B6 F6 80 11 ldab PIA1+1 F8B9 CA 0F orab #$F F8BB 53 comb F8BC 39 rts F8BD ; delay F8BD DEL: F8BD 36 psha F8BE 4F clra F8BF DEL1: F8BF 4A deca F8C0 26 FD bne DEL1 F8C2 32 pula F8C3 39 rts F8C4 ; input subroutine F8C4 ; get EUROCOM key code into A F8C4 DISPLA: F8C4 86 BF ldaa #%10111111 F8C6 CE A7 C7 ldx #ACTADD F8C9 C6 08 ldab #8 F8CB DLOOP1: F8CB A7 00 staa 0,x F8CD 08 inx F8CE 5A decb F8CF 26 FA bne DLOOP1 F8D1 7F A7 CF clr HDRSW F8D4 DLOOP2: F8D4 8D AD bsr DISP F8D6 BD F9 65 jsr TEST F8D9 B6 A7 CF ldaa HDRSW F8DC 27 F6 beq DLOOP2 F8DE 39 rts F8DF ; convert hex to decimal F8DF OUTDEZ: F8DF BD FA 6D jsr OUTSPC F8E2 CE A7 CB ldx #BEGA ; MEM F8E5 A6 00 ldaa 0,x F8E7 BD F9 C7 jsr OUTHR F8EA 08 inx F8EB BD F9 AE jsr OUTBY2 F8EE 8D 24 bsr CRLF F8F0 GOTOD: F8F0 7F A7 CB clr BEGA F8F3 7F A7 CC clr BEGA+1 F8F6 7F A7 CD clr ENDA F8F9 BD FA DA jsr BADDR F8FC D1: F8FC 27 E1 beq OUTDEZ F8FE CE A7 CD ldx #ENDA ; MEM+2 F901 D2: F901 09 dex F902 A6 01 ldaa 1,x F904 8B 01 adda #1 F906 19 daa F907 A7 01 staa 1,x F909 27 F6 beq D2 F90B FE A7 BA ldx INDEX F90E 09 dex F90F FF A7 BA stx INDEX F912 20 E8 bra D1 F914 ; new line + 3 spaces F914 CRLF: F914 CE FF 68 ldx #TCRLF F917 7E F9 A7 jmp PRINT F91A ; convert decimal to hex F91A INDEZ: F91A A7 00 staa 0,x F91C 08 inx F91D 8C A7 D0 cpx #HEADER ; MEM+5 F920 26 37 bne H1 F922 CE 00 00 ldx #0 F925 H3: F925 FF A7 BA stx INDEX F928 CE A7 CF ldx #HDRSW ; MEM+4 F92B H4: F92B A6 00 ldaa 0,x F92D 27 0D beq SKIP F92F 4A deca F930 A7 00 staa 0,x F932 FE A7 BA ldx INDEX F935 08 inx F936 26 ED bne H3 F938 CB 11 addb #$11 F93A 20 E9 bra H3 F93C SKIP: F93C 86 09 ldaa #9 F93E A7 00 staa 0,x F940 09 dex F941 8C A7 CA cpx #BCONT ; MEM-1 F944 26 E5 bne H4 F946 CE A7 BA ldx #INDEX F949 BD FA 6D jsr OUTSPC F94C 17 tba F94D BD F9 D1 jsr OUTPUT F950 8D 5C bsr OUTBY2 F952 8D C0 bsr CRLF F954 GOTOH: F954 C6 20 ldab #' ' F956 CE A7 CB ldx #BEGA ; MEM F959 H1: F959 BD FA 2D jsr GETHEX F95C H2: F95C 81 09 cmpa #9 F95E 2F BA ble INDEZ F960 BD FA 1C jsr INPERR F963 20 F7 bra H2 F965 ; check whether return key pressed F965 TEST: F965 FE A7 B6 ldx PORT F968 A6 01 ldaa 1,x F96A 88 80 eora #$80 ; '€' F96C 81 0D cmpa #$D F96E 27 50 beq CNTRL0 F970 39 rts F971 ;command: dump as table F971 GOTOT: F971 BD FC D5 jsr AREA F974 FE A7 B6 ldx PORT F977 WAIT: F977 A6 01 ldaa 1,x F979 84 80 anda #$80 ; '€' F97B 26 FA bne WAIT F97D FE A7 CB ldx BEGA F980 OUTALL: F980 FF A7 BA stx INDEX F983 8D 8F bsr CRLF F985 CE A7 BA ldx #INDEX F988 BD FA 67 jsr OUT2BS F98B FE A7 BA ldx INDEX F98E C6 10 ldab #16 F990 OUTMEM: F990 37 pshb F991 BD F8 5C jsr SPEED F994 BD FA 6A jsr OUT1BS F997 33 pulb F998 09 dex F999 BC A7 CD cpx ENDA F99C 27 22 beq CNTRL0 F99E 08 inx F99F 5A decb F9A0 26 EE bne OUTMEM F9A2 20 DC bra OUTALL F9A4 ; print text F9A4 PR1: F9A4 8D 2B bsr OUTPUT F9A6 08 inx F9A7 PRINT: F9A7 A6 00 ldaa 0,x F9A9 81 04 cmpa #4 F9AB 26 F7 bne PR1 F9AD 39 rts F9AE ; print 1 or 2 byte F9AE OUTBY2: F9AE 8D 00 bsr *+2 F9B0 OUTBYT: F9B0 EB 00 addb 0,x F9B2 A6 00 ldaa 0,x F9B4 08 inx F9B5 OUTB: F9B5 36 psha F9B6 8D 0B bsr OUTHL F9B8 32 pula F9B9 20 0C bra OUTHR F9BB ; single char entry from EUROCOM1 keyboard F9BB ; and output through screen F9BB GOTOX: F9BB BD F8 C4 jsr DISPLA F9BE 8D F5 bsr OUTB F9C0 CNTRL0: F9C0 7E FB 07 jmp CNTRL F9C3 ; output high nibble F9C3 OUTHL: F9C3 44 lsra F9C4 44 lsra F9C5 44 lsra F9C6 44 lsra F9C7 ; output low nibble F9C7 OUTHR: F9C7 84 0F anda #$F F9C9 8B 30 adda #'0' F9CB 81 39 cmpa #'9' F9CD 23 02 bls OUTPUT F9CF 8B 07 adda #7 F9D1 ; output single char F9D1 OUTPUT: F9D1 FF A7 B8 stx SAVEX F9D4 7D A7 BC tst OUTSW F9D7 27 0D beq VIDEO F9D9 37 pshb F9DA CE 80 08 ldx #ACIA F9DD OUT1: F9DD E6 00 ldab 0,x F9DF 57 asrb F9E0 57 asrb F9E1 24 FA bcc OUT1 F9E3 A7 01 staa 1,x F9E5 33 pulb F9E6 VIDEO: F9E6 8D 00 bsr *+2 F9E8 FE A7 B6 ldx PORT F9EB A7 00 staa 0,x F9ED 36 psha F9EE 84 7F anda #$7F ; '' F9F0 81 20 cmpa #' ' F9F2 2A 0E bpl HS F9F4 81 0C cmpa #$C F9F6 26 05 bne MS F9F8 CE 30 00 ldx #$3000 F9FB 20 08 bra TIME F9FD MS: F9FD CE 04 00 ldx #$400 FA00 20 03 bra TIME FA02 HS: FA02 FE A7 C5 ldx SPD FA05 TIME: FA05 09 dex FA06 26 FD bne TIME FA08 FE A7 B8 ldx SAVEX FA0B 32 pula FA0C 88 80 eora #$80 ; '€' FA0E 39 rts FA0F ; output speed FA0F GOTOV: FA0F CE FF 21 ldx #TSPEED ; " SPEED: " FA12 8D 93 bsr PRINT FA14 BD FA A2 jsr INPUT FA17 BD F8 59 jsr SPEED1 FA1A 20 A4 bra CNTRL0 FA1C ; input hex char FA1C INPERR: FA1C 7D A7 BC tst OUTSW FA1F 27 08 beq BACKSP FA21 C6 05 ldab #5 FA23 7F A7 BC clr OUTSW FA26 7E FB 80 jmp ERROR FA29 BACKSP: FA29 86 08 ldaa #8 FA2B 8D A4 bsr OUTPUT FA2D GETHEX: FA2D 8D 43 bsr INPU FA2F 7D A7 BC tst OUTSW FA32 26 0A bne NOECHO FA34 GETHE1: FA34 81 0D cmpa #$D FA36 27 88 beq CNTRL0 FA38 81 20 cmpa #' ' FA3A 2B F1 bmi GETHEX FA3C 8D 93 bsr OUTPUT FA3E NOECHO: FA3E 80 30 suba #'0' FA40 2B DA bmi INPERR FA42 81 09 cmpa #9 FA44 2F 0A ble GETH1 FA46 81 11 cmpa #$11 FA48 2B D2 bmi INPERR FA4A 81 16 cmpa #$16 FA4C 2E CE bgt INPERR FA4E 80 07 suba #7 FA50 GETH1: FA50 39 rts FA51 ; convert 2 hex chars into 1 byte FA51 INBYTE: FA51 8D DA bsr GETHEX FA53 INBYT1: FA53 48 asla FA54 48 asla FA55 48 asla FA56 48 asla FA57 37 pshb FA58 16 tab FA59 8D D2 bsr GETHEX FA5B 1B aba FA5C 16 tab FA5D FB A7 C4 addb CHSM FA60 F7 A7 C4 stab CHSM FA63 33 pulb FA64 39 rts FA65 ; output with space FA65 OUT22: FA65 8D 00 bsr *+2 FA67 OUT2BS: FA67 BD F9 B0 jsr OUTBYT FA6A OUT1BS: FA6A BD F9 B0 jsr OUTBYT FA6D OUTSPC: FA6D 86 20 ldaa #' ' FA6F 7E F9 D1 jmp OUTPUT FA72 ; enter single char FA72 INPU: FA72 7D A7 BC tst OUTSW FA75 27 16 beq INKEY FA77 INACIA: FA77 B6 80 08 ldaa ACIA FA7A 47 asra FA7B 24 FA bcc INACIA FA7D B6 80 09 ldaa ACIA+1 FA80 84 7F anda #$7F FA82 7D A7 BC tst OUTSW FA85 2A 1A bpl INAOUT FA87 FF A7 B8 stx SAVEX FA8A 7E F9 E6 jmp VIDEO FA8D INKEY: FA8D FF A7 B8 stx SAVEX FA90 FE A7 B6 ldx PORT FA93 IN1: FA93 A6 01 ldaa 1,x FA95 48 asla FA96 25 FB bcs IN1 FA98 IN2: FA98 A6 01 ldaa 1,x FA9A 48 asla FA9B 24 FB bcc IN2 FA9D 44 lsra FA9E FE A7 B8 ldx SAVEX FAA1 INAOUT: FAA1 39 rts FAA2 INPUT: FAA2 8D CE bsr INPU FAA4 7E F9 D1 jmp OUTPUT FAA7 ; show and modify memory FAA7 GOTOM: FAA7 8D 31 bsr BADDR FAA9 8D C2 bsr OUTSPC FAAB M1: FAAB FE A7 BA ldx INDEX FAAE 8D BA bsr OUT1BS FAB0 09 dex FAB1 M2: FAB1 8D BF bsr INPU FAB3 81 0A cmpa #$A FAB5 27 15 beq NXT FAB7 81 08 cmpa #8 FAB9 27 0F beq BS FABB BD FA 34 jsr GETHE1 FABE 8D 93 bsr INBYT1 FAC0 A7 00 staa 0,x FAC2 A1 00 cmpa 0,x FAC4 27 06 beq NXT FAC6 C6 01 ldab #1 FAC8 20 78 bra ERROR1 FACA BS: FACA 09 dex FACB 09 dex FACC NXT: FACC 08 inx FACD FF A7 BA stx INDEX FAD0 BD F9 14 jsr CRLF FAD3 CE A7 BA ldx #INDEX FAD6 8D 8F bsr OUT2BS FAD8 20 D1 bra M1 FADA ; 2 bytes to INDEX FADA BADDR: FADA BD FA 51 jsr INBYTE FADD B7 A7 BA staa INDEX FAE0 BD FA 51 jsr INBYTE FAE3 B7 A7 BB staa INDEX+1 FAE6 FE A7 BA ldx INDEX FAE9 39 rts FAEA ; kill all breakpoints FAEA GOTOK: FAEA CE FF 09 ldx #TCLEAR ; " ALL BREAKPOINTS CLEAR" FAED BD F9 A7 jsr PRINT FAF0 GOTOK1: FAF0 CE A7 D3 ldx #BPTBL FAF3 KILL: FAF3 A6 02 ldaa 2,x FAF5 27 08 beq NOBPT FAF7 6F 02 clr 2,x FAF9 EE 00 ldx 0,x FAFB A7 00 staa 0,x FAFD 20 F1 bra GOTOK1 FAFF NOBPT: FAFF 08 inx FB00 08 inx FB01 08 inx FB02 8C A8 00 cpx #ENDBPT FB05 26 EC bne KILL FB07 ; main control loop FB07 CNTRL: FB07 8E A7 B5 lds #STACK FB0A 7F A7 BC clr OUTSW FB0D 86 15 ldaa #$15 FB0F B7 80 08 staa ACIA FB12 CE FF 6E ldx #TEUROC ; "\r\n\nEUROCOM CONTROL\n\r\n>" FB15 CLOOP: FB15 8D 75 bsr PRINT1 FB17 8D 89 bsr INPUT FB19 16 tab FB1A BD FA 6D jsr OUTSPC FB1D CE FF 9F ldx #FCTABL FB20 TSTNXT: FB20 E1 00 cmpb 0,x FB22 26 04 bne WRONG FB24 EE 01 ldx 1,x FB26 6E 00 jmp 0,x FB28 WRONG: FB28 08 inx FB29 08 inx FB2A 08 inx FB2B 8C FF C9 cpx #SPDTBL ; FCTBEN FB2E 26 F0 bne TSTNXT FB30 86 3F ldaa #'?' FB32 BD F9 D1 jsr OUTPUT FB35 CE FF 81 ldx #(TEUROC+$13) FB38 20 DB bra CLOOP FB3A ; set breakpoint FB3A GOTOP: FB3A 8D 9E bsr BADDR FB3C A6 00 ldaa 0,x FB3E 26 04 bne P0 FB40 C6 02 ldab #2 FB42 ERROR1: FB42 20 3C bra ERROR FB44 P0: FB44 C6 3F ldab #$3F ; '?' FB46 11 cba FB47 26 04 bne P1 FB49 C6 04 ldab #4 FB4B 20 33 bra ERROR FB4D P1: FB4D E7 00 stab 0,x FB4F E6 00 ldab 0,x FB51 C1 3F cmpb #$3F ; '?' FB53 27 04 beq P2 FB55 C6 01 ldab #1 FB57 20 27 bra ERROR FB59 P2: FB59 CE A7 D3 ldx #BPTBL FB5C NXTTRY: FB5C E6 02 ldab 2,x FB5E 26 11 bne FILLED FB60 A7 02 staa 2,x FB62 F6 A7 BA ldab INDEX FB65 E7 00 stab 0,x FB67 F6 A7 BB ldab INDEX+1 FB6A E7 01 stab 1,x FB6C BD F9 14 jsr CRLF FB6F 20 C9 bra GOTOP FB71 FILLED: FB71 08 inx FB72 08 inx FB73 08 inx FB74 8C A8 00 cpx #$A800 FB77 26 E3 bne NXTTRY FB79 FE A7 BA ldx INDEX FB7C A7 00 staa 0,x FB7E C6 03 ldab #3 FB80 ERROR: FB80 8D 07 bsr ERROUT FB82 17 tba FB83 BD F9 B5 jsr OUTB FB86 CNTRL1: FB86 7E FB 07 jmp CNTRL FB89 ERROUT: FB89 CE FF 5F ldx #TERROR ; " ERROR " FB8C PRINT1: FB8C 7E F9 A7 jmp PRINT FB8F ; SWI interrupt handler FB8F SWIR: FB8F 30 tsx FB90 6D 06 tst 6,x FB92 26 02 bne SWIR1 FB94 6A 05 dec 5,x FB96 SWIR1: FB96 6A 06 dec 6,x FB98 8D 3B bsr REGDIS FB9A 36 psha FB9B 30 tsx FB9C EE 06 ldx 6,x FB9E FF A7 BA stx INDEX FBA1 CE A7 D3 ldx #BPTBL FBA4 NXTBPT: FBA4 A6 00 ldaa 0,x FBA6 B1 A7 BA cmpa INDEX FBA9 26 1E bne NOFIT FBAB A6 01 ldaa 1,x FBAD B1 A7 BB cmpa INDEX+1 FBB0 26 17 bne NOFIT FBB2 A6 02 ldaa 2,x FBB4 6F 02 clr 2,x FBB6 FE A7 BA ldx INDEX FBB9 A7 00 staa 0,x FBBB 32 pula FBBC 81 53 cmpa #'S' FBBE 27 79 beq STEP1 FBC0 81 20 cmpa #' ' FBC2 27 04 beq GO1 FBC4 81 47 cmpa #'G' FBC6 26 BE bne CNTRL1 FBC8 GO1: FBC8 3B rti FBC9 NOFIT: FBC9 08 inx FBCA 08 inx FBCB 08 inx FBCC 8C A8 00 cpx #ENDBPT FBCF 26 D3 bne NXTBPT FBD1 C6 09 ldab #9 FBD3 20 AB bra ERROR FBD5 REGDIS: FBD5 BD F9 14 jsr CRLF FBD8 CE FE F1 ldx #TRGSTR ; "CC=" FBDB FF A7 CF stx HDRSW FBDE 30 tsx FBDF 08 inx FBE0 FF A7 CB stx BEGA FBE3 08 inx FBE4 8D 55 bsr RGSTR1 FBE6 8D 53 bsr RGSTR1 FBE8 8D 51 bsr RGSTR1 FBEA 8D 64 bsr RGSTR2 FBEC 8D 62 bsr RGSTR2 FBEE CE A7 CB ldx #BEGA FBF1 8D 5D bsr RGSTR2 FBF3 8D 63 bsr OUTSP2 FBF5 BD FA A2 jsr INPUT FBF8 81 43 cmpa #'C' FBFA 26 59 bne ROUT FBFC BD F9 14 jsr CRLF FBFF 8D 55 bsr OUTSP4 FC01 8D 57 bsr OUTSP1 FC03 FE A7 CB ldx BEGA FC06 C6 05 ldab #5 FC08 REG0: FC08 BD FA 72 jsr INPU FC0B 81 20 cmpa #' ' FC0D 27 1C beq REG3 FC0F BD FA 34 jsr GETHE1 FC12 BD FA 53 jsr INBYT1 FC15 A7 01 staa 1,x FC17 C1 02 cmpb #2 FC19 22 06 bhi REG2 FC1B BD FA 51 jsr INBYTE FC1E A7 02 staa 2,x FC20 REG1: FC20 08 inx FC21 REG2: FC21 08 inx FC22 8D 32 bsr OUTSP4 FC24 8D 34 bsr OUTSP1 FC26 5A decb FC27 26 DF bne REG0 FC29 20 AA bra REGDIS FC2B REG3: FC2B C1 02 cmpb #2 FC2D 22 02 bhi REG4 FC2F 8D 27 bsr OUTSP2 FC31 REG4: FC31 8D 25 bsr OUTSP2 FC33 C1 02 cmpb #2 FC35 22 EA bhi REG2 FC37 20 E7 bra REG1 FC39 STEP1: FC39 20 52 bra STEP FC3B RGSTR1: FC3B FF A7 CD stx ENDA FC3E 8D 18 bsr OUTSP2 FC40 FE A7 CF ldx HDRSW FC43 BD F9 A7 jsr PRINT FC46 08 inx FC47 FF A7 CF stx HDRSW FC4A FE A7 CD ldx ENDA FC4D 7E F9 B0 jmp OUTBYT FC50 RGSTR2: FC50 8D E9 bsr RGSTR1 FC52 7E F9 B0 jmp OUTBYT FC55 ROUT: FC55 39 rts FC56 OUTSP4: FC56 8D 00 bsr *+2 FC58 OUTSP2: FC58 8D 00 bsr *+2 FC5A OUTSP1: FC5A 7E FA 6D jmp OUTSPC FC5D CNTRL0: FC5D 0E cli FC5E 7E FB 07 jmp CNTRL FC61 ; single step control FC61 GOTOS: FC61 4F clra FC62 36 psha FC63 36 psha FC64 36 psha FC65 36 psha FC66 36 psha FC67 36 psha FC68 36 psha FC69 8D 2E bsr BADDR1 FC6B 30 tsx FC6C B6 A7 BA ldaa INDEX FC6F A7 05 staa 5,x FC71 B6 A7 BB ldaa INDEX+1 FC74 A7 06 staa 6,x FC76 SSLOOP: FC76 86 3E ldaa #'>' FC78 B7 80 12 staa PIA1+2 FC7B B6 80 10 ldaa PIA1 FC7E BD FB D5 jsr REGDIS FC81 81 47 cmpa #'G' FC83 27 10 beq GO2 FC85 81 20 cmpa #' ' FC87 27 04 beq STEP FC89 81 53 cmpa #'S' FC8B 26 D0 bne CNTRL0 FC8D STEP: FC8D 86 37 ldaa #$37 ; '7' FC8F B7 80 12 staa PIA1+2 FC92 01 nop FC93 01 nop FC94 01 nop FC95 GO2: FC95 3B rti FC96 PRIBAD: FC96 BD F9 A7 jsr PRINT FC99 BADDR1: FC99 7E FA DA jmp BADDR FC9C ; jump to given address FC9C GOTOG: FC9C 8D FB bsr BADDR1 FC9E 6E 00 jmp 0,x FCA0 ; branch calculation FCA0 B0: FCA0 BD FA 6D jsr OUTSPC FCA3 17 tba FCA4 BD F9 B5 jsr OUTB FCA7 BD F9 14 jsr CRLF FCAA GOTOB: FCAA CE FF 8C ldx #TBRA ; "FROM " FCAD 8D E7 bsr PRIBAD FCAF FF A7 CB stx BEGA FCB2 CE FF 92 ldx #TTO ; " TO " FCB5 8D DF bsr PRIBAD FCB7 FF A7 CD stx ENDA FCBA FE A7 CB ldx BEGA FCBD 86 7E ldaa #$7E FCBF B1: FCBF 09 dex FCC0 4A deca FCC1 26 FC bne B1 FCC3 C6 80 ldab #$80 FCC5 B2: FCC5 BC A7 CD cpx ENDA FCC8 27 D6 beq B0 FCCA 08 inx FCCB 5C incb FCCC C1 80 cmpb #$80 FCCE 26 F5 bne B2 FCD0 C6 08 ldab #8 FCD2 7E FB 80 jmp ERROR FCD5 ; enter area FCD5 AREA: FCD5 CE FF 85 ldx #TAREA ; "AREA: " FCD8 8D BC bsr PRIBAD FCDA FF A7 CB stx BEGA FCDD 86 2D ldaa #'-' FCDF BD F9 D1 jsr OUTPUT FCE2 8D B5 bsr BADDR1 FCE4 FF A7 CD stx ENDA FCE7 4F clra FCE8 39 rts FCE9 ; memory test FCE9 GOTOW: FCE9 8D EA bsr AREA FCEB FE A7 B6 ldx PORT FCEE WAIT1: FCEE A6 01 ldaa 1,x FCF0 84 80 anda #$80 FCF2 26 FA bne WAIT1 FCF4 8D 0D bsr WALK FCF6 4A deca FCF7 8D 0A bsr WALK FCF9 86 55 ldaa #$55 FCFB 8D 06 bsr WALK FCFD 43 coma FCFE 8D 03 bsr WALK FD00 7E FB 07 jmp CNTRL FD03 WALK: FD03 FE A7 CB ldx BEGA FD06 09 dex FD07 W1: FD07 08 inx FD08 E6 00 ldab 0,x FD0A A7 00 staa 0,x FD0C A1 00 cmpa 0,x FD0E 27 21 beq NOERR FD10 37 pshb FD11 36 psha FD12 FF A7 BA stx INDEX FD15 BD F9 14 jsr CRLF FD18 CE A7 BA ldx #INDEX FD1B BD FA 67 jsr OUT2BS FD1E FE A7 BA ldx INDEX FD21 BD FA 6A jsr OUT1BS FD24 32 pula FD25 36 psha FD26 BD F9 B5 jsr OUTB FD29 BD F8 5C jsr SPEED FD2C 32 pula FD2D 33 pulb FD2E FE A7 BA ldx INDEX FD31 NOERR: FD31 E7 00 stab 0,x FD33 BC A7 CD cpx ENDA FD36 26 CF bne W1 FD38 39 rts FD39 ; delay for header/trailer (cassette recorder dump) FD39 DELAY: FD39 CE 16 A8 ldx #5800 FD3C DELAY1: FD3C BD F8 BD jsr DEL FD3F 09 dex FD40 26 FA bne DELAY1 FD42 39 rts FD43 ; send S0/S1/S9 records through ACIA FD43 GOTOR: FD43 8D 90 bsr AREA FD45 BD FD DB jsr HDRIN FD48 8D EF bsr DELAY FD4A C6 0A ldab #10 FD4C 4F clra FD4D COUNT: FD4D BD F9 D1 jsr OUTPUT FD50 5A decb FD51 26 FA bne COUNT FD53 7D A7 CF tst HDRSW FD56 27 14 beq REC FD58 CE FF 97 ldx #TCRLFS ; "\r\nS" FD5B BD F9 A7 jsr PRINT FD5E 86 30 ldaa #'0' FD60 BD F9 D1 jsr OUTPUT FD63 CE A7 D0 ldx #HEADER FD66 BD F9 AE jsr OUTBY2 FD69 BD F9 B0 jsr OUTBYT FD6C REC: FD6C FE A7 CB ldx BEGA FD6F FF A7 C7 stx ACTADD FD72 REC0: FD72 B6 A7 CE ldaa ENDA+1 FD75 B0 A7 C8 suba ACTADD+1 FD78 F6 A7 CD ldab ENDA FD7B F2 A7 C7 sbcb ACTADD FD7E 26 05 bne REC1 FD80 B1 A7 BD cmpa LENGTH FD83 25 04 bcs REC2 FD85 REC1: FD85 B6 A7 BD ldaa LENGTH FD88 4A deca FD89 REC2: FD89 8B 04 adda #4 FD8B B7 A7 C9 staa MCONT FD8E 80 03 suba #3 FD90 B7 A7 CA staa BCONT FD93 CE FF 97 ldx #TCRLFS ; "\r\nS" FD96 BD F9 A7 jsr PRINT FD99 86 31 ldaa #'1' FD9B BD F9 D1 jsr OUTPUT FD9E 5F clrb FD9F CE A7 C9 ldx #MCONT FDA2 BD F9 B0 jsr OUTBYT FDA5 CE A7 C7 ldx #ACTADD FDA8 BD F9 AE jsr OUTBY2 FDAB FE A7 C7 ldx ACTADD FDAE REC3: FDAE BD F9 B0 jsr OUTBYT FDB1 7A A7 CA dec BCONT FDB4 26 F8 bne REC3 FDB6 FF A7 C7 stx ACTADD FDB9 53 comb FDBA 17 tba FDBB BD F9 B5 jsr OUTB FDBE FE A7 C7 ldx ACTADD FDC1 09 dex FDC2 BC A7 CD cpx ENDA FDC5 26 AB bne REC0 FDC7 CE FF 97 ldx #TCRLFS ; "\r\nS" FDCA BD F9 A7 jsr PRINT FDCD 86 39 ldaa #'9' FDCF BD F9 D1 jsr OUTPUT FDD2 CE 03 66 ldx #870 FDD5 BD FD 3C jsr DELAY1 FDD8 7E FE 5C jmp CNTRLN FDDB ; read in header FDDB HDRIN: FDDB 7F A7 CF clr HDRSW FDDE CE FF 54 ldx #THDR ; " HEADER: " FDE1 BD F9 A7 jsr PRINT FDE4 FE FF E5 ldx HIGH FDE7 FF A7 C5 stx SPD FDEA BD FA 72 jsr INPU FDED 81 20 cmpa #' ' FDEF 27 18 beq NOHDR FDF1 7C A7 CF inc HDRSW FDF4 CE A7 D0 ldx #HEADER FDF7 BD FA 34 jsr GETHE1 FDFA BD FA 53 jsr INBYT1 FDFD A7 00 staa 0,x FDFF BD FA 51 jsr INBYTE FE02 A7 01 staa 1,x FE04 BD FA 51 jsr INBYTE FE07 A7 02 staa 2,x FE09 NOHDR: FE09 CE FF 2B ldx #TMOTOR ; " MOTOR O " FE0C BD F9 A7 jsr PRINT FE0F MOOFF: FE0F 86 15 ldaa #$15 FE11 B7 80 08 staa ACIA FE14 CE FF 37 ldx #TOFF ; "\b\bFF" FE17 BD F9 A7 jsr PRINT FE1A NEWIN1: FE1A BD FA 72 jsr INPU FE1D 81 0D cmpa #$D FE1F 27 41 beq CNTRL5 FE21 81 0A cmpa #$A FE23 27 20 beq RUN FE25 81 20 cmpa #' ' FE27 26 F1 bne NEWIN1 FE29 86 55 ldaa #$55 FE2B B7 80 08 staa ACIA FE2E CE FF 3C ldx #TON ; "\b\bN " FE31 BD F9 A7 jsr PRINT FE34 NEWIN2: FE34 BD FA 72 jsr INPU FE37 81 0D cmpa #$D FE39 27 27 beq CNTRL5 FE3B 81 0A cmpa #$A FE3D 27 06 beq RUN FE3F 81 20 cmpa #' ' FE41 26 F1 bne NEWIN2 FE43 20 CA bra MOOFF FE45 RUN: FE45 CE FF 41 ldx #TSTART ; "\b\b\b\b\b\b\b\b\b START " FE48 BD F9 A7 jsr PRINT FE4B 86 55 ldaa #$55 FE4D B7 80 08 staa ACIA FE50 BD F9 14 jsr CRLF FE53 86 08 ldaa #8 FE55 BD F9 D1 jsr OUTPUT FE58 7C A7 BC inc OUTSW FE5B 39 rts FE5C CNTRLN: FE5C FE FF D6 ldx NORMAL FE5F FF A7 C5 stx SPD FE62 CNTRL5: FE62 7E FB 07 jmp CNTRL FE65 ; read S0/S1/S9 records from ACIA FE65 GOTOL: FE65 BD FD DB jsr HDRIN FE68 LD1: FE68 8D 32 bsr IN FE6A 81 53 cmpa #'S' FE6C 26 FA bne LD1 FE6E 8D 2C bsr IN FE70 7D A7 CF tst HDRSW FE73 27 2A beq NOSLCT FE75 81 30 cmpa #'0' FE77 26 EF bne LD1 FE79 CE A7 CF ldx #HDRSW ; HEADER-1 FE7C LD2: FE7C BD FA 51 jsr INBYTE FE7F 08 inx FE80 E6 00 ldab 0,x FE82 11 cba FE83 26 E3 bne LD1 FE85 8C A7 D2 cpx #(HEADER+2) FE88 26 F2 bne LD2 FE8A 7F A7 BC clr OUTSW FE8D 86 08 ldaa #8 FE8F BD F9 D1 jsr OUTPUT FE92 BD F9 D1 jsr OUTPUT FE95 C6 81 ldab #$81 FE97 F7 A7 BC stab OUTSW FE9A 20 15 bra LOAD FE9C IN: FE9C 7E FA 72 jmp INPU FE9F NOSLCT: FE9F C6 81 ldab #$81 FEA1 F7 A7 BC stab OUTSW FEA4 81 30 cmpa #'0' FEA6 26 15 bne LOAD0 FEA8 BD FA 51 jsr INBYTE FEAB BD FA 51 jsr INBYTE FEAE BD FA 51 jsr INBYTE FEB1 LOAD: FEB1 8D E9 bsr IN FEB3 81 53 cmpa #'S' FEB5 26 FA bne LOAD FEB7 8D E3 bsr IN FEB9 81 39 cmpa #'9' FEBB 27 9F beq CNTRLN FEBD LOAD0: FEBD 81 31 cmpa #'1' FEBF 26 F0 bne LOAD FEC1 7F A7 C4 clr CHSM FEC4 BD FA 51 jsr INBYTE FEC7 80 02 suba #2 FEC9 B7 A7 CA staa BCONT FECC BD FA DA jsr BADDR FECF LOAD1: FECF BD FA 51 jsr INBYTE FED2 7A A7 CA dec BCONT FED5 27 09 beq LOAD2 FED7 A7 00 staa 0,x FED9 A1 00 cmpa 0,x FEDB 26 10 bne MERR FEDD 08 inx FEDE 20 EF bra LOAD1 FEE0 LOAD2: FEE0 7C A7 C4 inc CHSM FEE3 27 CC beq LOAD FEE5 C6 06 ldab #6 FEE7 ERROR2: FEE7 7F A7 BC clr OUTSW FEEA 7E FB 80 jmp ERROR FEED MERR: FEED C6 07 ldab #7 FEEF 20 F6 bra ERROR2 FEF1 ; text table FEF1 43 43 3D TRGSTR: fcc "CC=" FEF4 04 fcb 4 FEF5 20 42 3D fcc " B=" FEF8 04 fcb 4 FEF9 20 41 3D fcc " A=" FEFC 04 fcb 4 FEFD 20 58 3D fcc " X=" FF00 04 fcb 4 FF01 50 43 3D fcc "PC=" FF04 04 fcb 4 FF05 53 50 3D fcc "SP=" FF08 04 fcb 4 FF09 20 20 41+TCLEAR: fcc " ALL BREAKPOINTS CLEAR" FF20 04 fcb 4 FF21 20 20 53+TSPEED: fcc " SPEED: " FF2A 04 fcb 4 FF2B 20 20 4D+TMOTOR: fcc " MOTOR O " FF36 04 fcb 4 FF37 08 08 46+TOFF: fcb 8, 8 FF37 46 fcc "FF" FF3B 04 fcb 4 FF3C 08 08 4E+TON: fcb 8, 8 FF3C 20 fcc "N " FF40 04 fcb 4 FF41 08 08 08+TSTART: fcb 8, 8, 8, 8, 8, 8, 8, 8, 8 FF41 08 08 08+ fcc " START " FF53 04 fcb 4 FF54 20 20 48+THDR: fcc " HEADER: " FF5E 04 fcb 4 FF5F 20 20 45+TERROR: fcc " ERROR " FF67 04 fcb 4 FF68 0A 0D 20+TCRLF: fcb $A, $D, ' ', ' ', ' ', 4 FF6E 0D 0A 0A+TEUROC: fcb $D, $A, $A FF6E 45 55 52+ fcc "EUROCOM CONTROL" FF6E 4F 43 4F+ fcb $A, $D, $A FF6E 4D 20 43+ fcc ">" FF84 04 fcb 4 FF85 41 52 45+TAREA: fcc "AREA: " FF8B 04 fcb 4 FF8C 46 52 4F+TBRA: fcc "FROM " FF91 04 fcb 4 FF92 20 54 4F+TTO: fcc " TO " FF96 04 fcb 4 FF97 0D 0A 00+TCRLFS: fcb $D, $A, 0, 0, 0, 0 FF97 00 00 00+ fcc "S" FF9E 04 fcb 4 FF9F ; jump table for commands FF9F 56 FCTABL: fcb 'V' FFA0 FA 0F fdb GOTOV FFA2 58 fcb 'X' FFA3 F9 BB fdb GOTOX FFA5 4C fcb 'L' FFA6 FE 65 fdb GOTOL FFA8 52 fcb 'R' FFA9 FD 43 fdb GOTOR FFAB 54 fcb 'T' FFAC F9 71 fdb GOTOT FFAE 47 fcb 'G' FFAF FC 9C fdb GOTOG FFB1 4B fcb 'K' FFB2 FA EA fdb GOTOK FFB4 4D fcb 'M' FFB5 FA A7 fdb GOTOM FFB7 50 fcb 'P' FFB8 FB 3A fdb GOTOP FFBA 53 fcb 'S' FFBB FC 61 fdb GOTOS FFBD 57 fcb 'W' FFBE FC E9 fdb GOTOW FFC0 44 fcb 'D' FFC1 F8 F0 fdb GOTOD FFC3 48 fcb 'H' FFC4 F9 54 fdb GOTOH FFC6 42 fcb 'B' FFC7 FC AA fdb GOTOB FFC9 ; table for output speeds FFC9 30 SPDTBL: fcb '0' FFCA 00 00 fdb 0 FFCC 31 fcb '1' FFCD 16 00 fdb $1600 FFCF 32 fcb '2' FFD0 0B 00 fdb $B00 FFD2 33 fcb '3' FFD3 05 80 fdb $580 FFD5 34 fcb '4' FFD6 02 C0 NORMAL: fdb $2C0 FFD8 35 fcb '5' FFD9 01 60 fdb $160 FFDB 36 fcb '6' FFDC 00 B0 fdb $B0 FFDE 37 fcb '7' FFDF 00 58 fdb $58 FFE1 38 fcb '8' FFE2 00 2C fdb $2C FFE4 39 fcb '9' FFE5 00 01 HIGH: fdb 1 FFE7 ; software interrupt entry FFE7 SWI: FFE7 FE A7 BE ldx SWIV FFEA 6E 00 jmp 0,x FFEC ; NMI entry point FFEC NMI: FFEC FE A7 C2 ldx NMIV FFEF 6E 00 jmp 0,x FFF1 ; IRQ entry point FFF1 IRQ: FFF1 FE A7 C0 ldx IRQV FFF4 6E 00 jmp 0,x FFF6 F7 D7 fcb $F7, $D7 ; unused FFF8 ; interrupt/reset jump vectors FFF8 FF F1 fdb IRQ FFFA FF E7 fdb SWI FFFC FF EC fdb NMI FFFE F8 00 fdb START FFFE end