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
