(back to project page)

Videx Videoterm ROM 2.4.bin Disassembly

                   ********************************************************************************
                   *                                                                              *
                   * Videoterm Interface                                                          *
                   * Firmware v. 2.4                                                              *
                   *                                                                              *
                   * Written by Darrel Aldrich                                                    *
                   * (c) 1981 Videx                                                               *
                   *                                                                              *
                   ********************************************************************************
                   * 6502bench SourceGen v1.8.4-dev1                                              *
                   ********************************************************************************
                   MON_CH          .eq     $24               ;cursor horizontal displacement
                   MON_CV          .eq     $25               ;cursor vertical displacement
                   MON_BASL        .eq     $28               ;base address for text output (lo)
                   XSAVE           .eq     $35               ;not used by monitor?
                   MON_CSWL        .eq     $36               ;character output hook (lo)
                   MON_CSWH        .eq     $37               ;character output hook (hi)
                   MON_KSWL        .eq     $38               ;character input hook (lo)
                   MON_KSWH        .eq     $39               ;character input hook (hi)
                   MON_RNDL        .eq     $4e               ;low byte of KEYIN "random" value
                   MON_RNDH        .eq     $4f               ;high byte of KEYIN "random" value
                   IN              .eq     $0200
                   CRFLAG          .eq     $0478             ;temp
                   BASEL           .eq     $047b             ;Screen base address low
                   ASAV1           .eq     $04f8             ;temp
                   BASEH           .eq     $04fb             ;Screen base address high
                   CHORZ           .eq     $057b             ;Cursor horizontal position
                   TEMPX           .eq     $05f8             ;temp
                   CVERT           .eq     $05fb             ;Cursor vertical position
                   OLDCHAR         .eq     $0678             ;temp
                   BYTE            .eq     $067b             ;I/O byte for Pascal entries
                   START           .eq     $06fb             ;Screen start address
                   POFF            .eq     $077b             ;Power off and lead in counter
                   FLAGS           .eq     $07fb             ;Video set up flags
                   KBD             .eq     $c000             ;R last key pressed + 128
                   KBDSTRB         .eq     $c010             ;RW keyboard strobe
                   SPKR            .eq     $c030             ;RW toggle speaker
                   SETAN0          .eq     $c058             ;RW annunciator 0 off
                   CLRAN0          .eq     $c059             ;RW annunciator 0 on
                   BUTN2           .eq     $c063             ;R switch input 2 / shift key
                   DEV0            .eq     $c0b0             ;CRTC Address Register
                   DEV1            .eq     $c0b1             ;CRTC Data Registers
                   DISP0           .eq     $cc00
                   DISP1           .eq     $cd00
                   CLRROM          .eq     $cfff             ;disable slot C8 ROM
                   MON_VTAB        .eq     $fc22             ;tab to row specified in CV
                   MON_SETKBD      .eq     $fe89             ;reset char input handler to ROM
                   MON_SETVID      .eq     $fe93             ;reset char output handler to ROM
                   IORTS           .eq     $ffcb

                   ********************************************************************************
                   *                                                                              *
                   * Set up CRTC and clear screen                                                 *
                   *                                                                              *
                   ********************************************************************************
                                   .addrs  $c800
c800: ad 7b 07     SETUP           lda     POFF              ;Get power off flag
c803: 29 f8                        and     #$f8              ;Strip off lead in counters
c805: c9 30                        cmp     #$30              ;Has power been turned off?
c807: f0 21                        beq     SETEXIT
c809: a9 30        RESTART         lda     #$30
c80b: 8d 7b 07                     sta     POFF              ;Set defaults for flags
c80e: 8d fb 07                     sta     FLAGS
c811: a9 00                        lda     #$00
c813: 8d fb 06                     sta     START
c816: 20 61 c9                     jsr     CLSCRN
c819: a2 00                        ldx     #$00
c81b: 8a           LOOP            txa
c81c: 8d b0 c0                     sta     DEV0              ;For the CRTC address
c81f: bd a1 c8                     lda     TABLE,x           ;Get parameter
c822: 8d b1 c0                     sta     DEV1              ;Store into CRTC
c825: e8                           inx
c826: e0 10                        cpx     #$10
c828: d0 f1                        bne     LOOP              ;Continue loop until done
c82a: 8d 59 c0     SETEXIT         sta     CLRAN0
c82d: 60                           rts

c82e: ad fb 07     EXIT            lda     FLAGS
c831: 29 08                        and     #$08
c833: f0 09                        beq     NORMOUT
c835: 20 93 fe                     jsr     MON_SETVID
c838: 20 22 fc                     jsr     MON_VTAB
c83b: 20 89 fe                     jsr     MON_SETKBD
c83e: 68           NORMOUT         pla                       ;Recover registers
c83f: a8                           tay
c840: 68                           pla
c841: aa                           tax
c842: 68                           pla
c843: 60                           rts

                   ********************************************************************************
                   *                                                                              *
                   * Get character from keyboard                                                  *
                   ********************************************************************************
c844: 20 d1 c8     RDKEY           jsr     CSRMOV            ;Position cursor
c847: e6 4e        KEYIN           inc     MON_RNDL          ;Update basic random number
c849: d0 02                        bne     KEYIN2
c84b: e6 4f                        inc     MON_RNDH
c84d: ad 00 c0     KEYIN2          lda     KBD               ;Poll keyboard
c850: 10 f5                        bpl     KEYIN             ;Loop until key is struck
c852: 20 5c c8                     jsr     KEYSTAT
c855: 90 f0                        bcc     KEYIN
c857: 2c 10 c0     NOKEY           bit     KBDSTRB           ;Clear keyboard stroke
c85a: 18                           clc
c85b: 60                           rts

c85c: c9 8b        KEYSTAT         cmp     #$8b              ;Check for control X
c85e: d0 02                        bne     NOTK              ;Skip if not
c860: a9 db                        lda     #$db              ;Substitute a right bracket
c862: c9 81        NOTK            cmp     #$81              ;Check for control A
c864: d0 0a                        bne     NTSHFT            ;Skip if not
c866: ad fb 07                     lda     FLAGS
c869: 49 40                        eor     #$40
c86b: 8d fb 07                     sta     FLAGS             ;Toggle upr/lwr case flag
c86e: b0 e7                        bcs     NOKEY             ;Get next key
c870: 48           NTSHFT          pha                       ;Save character
c871: ad fb 07                     lda     FLAGS
c874: 0a                           asl     A
c875: 0a                           asl     A                 ;Check upr/lwr case conversion flag
c876: 68                           pla                       ;Restore character
c877: 90 1f                        bcc     INDONE            ;Don't convert if flag clear
c879: c9 b0                        cmp     #$b0
c87b: 90 1b                        bcc     INDONE            ;Don't convert special characters
c87d: 2c 63 c0                     bit     BUTN2
c880: 30 14                        bmi     NOSHIFT
c882: c9 b0                        cmp     #‘0’ | $80
c884: f0 0e                        beq     ZERO
c886: c9 c0                        cmp     #‘@’ | $80
c888: d0 02                        bne     NOTAT
c88a: a9 d0                        lda     #‘P’ | $80
c88c: c9 db        NOTAT           cmp     #‘[’ | $80
c88e: 90 08                        bcc     INDONE
c890: 29 cf                        and     #$cf
c892: d0 04                        bne     INDONE
c894: a9 dd        ZERO            lda     #‘]’ | $80
c896: 09 20        NOSHIFT         ora     #$20
c898: 48           INDONE          pha                       ;Duplicate character
c899: 29 7f                        and     #$7f              ;Strip off high bit
c89b: 8d 7b 06                     sta     BYTE              ;Save for Pascal
c89e: 68                           pla                       ;Recover for Basic
c89f: 38                           sec
c8a0: 60                           rts

                   ********************************************************************************
                   * These are the CRTC initialization values, each one sent to a different       *
                   * internal register.                                                           *
                   ********************************************************************************
c8a1: 7a           TABLE           .dd1    $7a               ;R0 - Horizontal Total Register
c8a2: 50                           .dd1    $50               ;R1 - Horizontal Displayed Register
c8a3: 5e                           .dd1    $5e               ;R2 - Horizontal Sync Position Register
c8a4: 2f                           .dd1    $2f               ;R3 - Horizontal Sync Width Register
c8a5: 22                           .dd1    $22               ;R4 - Vertical Total Register
c8a6: 00                           .dd1    $00               ;R5 - Vertical Total Adjust Register
c8a7: 18                           .dd1    $18               ;R6 - Vertical Displayed Register
c8a8: 1d                           .dd1    $1d               ;R7 - Vertical Sync Position Register
c8a9: 00                           .dd1    $00               ;R8 - Interlace Mode Register
c8aa: 08                           .dd1    $08               ;R9 - Maximum Scan Line Register
c8ab: e0                           .dd1    $e0               ;R10 - Cursor End Register
c8ac: 08                           .dd1    $08               ;R11 - Cursor End Register
c8ad: 00                           .dd1    $00               ;R12 - Start Address Register (H)
c8ae: 00                           .dd1    $00               ;R13 - Start Address Register (L)
c8af: 00                           .dd1    $00               ;R14 - Cursor Register (H)
c8b0: 00                           .dd1    $00               ;R15 - Cursor Register (L)

                   ********************************************************************************
                   *                                                                              *
                   * Secondary basic output routine                                               *
                   *                                                                              *
                   ********************************************************************************
c8b1: 8d 7b 06     BASOUT1         sta     BYTE
c8b4: a5 25                        lda     MON_CV
c8b6: cd fb 05                     cmp     CVERT
c8b9: f0 06                        beq     CVOK
c8bb: 8d fb 05                     sta     CVERT
c8be: 20 04 ca                     jsr     VTAB
c8c1: a5 24        CVOK            lda     MON_CH            ;Perform HTab
c8c3: cd 7b 05                     cmp     CHORZ
c8c6: 90 03                        bcc     PSCLOUT
c8c8: 8d 7b 05                     sta     CHORZ
c8cb: ad 7b 06     PSCLOUT         lda     BYTE              ;Get character
c8ce: 20 89 ca                     jsr     OUTPT1            ;Output character
c8d1: a9 0f        CSRMOV          lda     #$0f              ;Set up CRTC address
c8d3: 8d b0 c0                     sta     DEV0              ;for cursor low address
c8d6: ad 7b 05                     lda     CHORZ             ;Calculate address
c8d9: c9 50                        cmp     #80
c8db: b0 13                        bcs     RTS6
c8dd: 6d 7b 04                     adc     BASEL
c8e0: 8d b1 c0                     sta     DEV1              ;Save address
c8e3: a9 0e                        lda     #$0e              ;Set up CRTC address
c8e5: 8d b0 c0                     sta     DEV0              ;for cursor high address
c8e8: a9 00                        lda     #$00              ;Calculate address
c8ea: 6d fb 04                     adc     BASEH
c8ed: 8d b1 c0                     sta     DEV1              ;Save address
c8f0: 60           RTS6            rts

                   ********************************************************************************
                   *                                                                              *
                   * Perform escape functions                                                     *
                   ********************************************************************************
c8f1: 49 c0        ESC1            eor     #$c0
c8f3: c9 08                        cmp     #$08
c8f5: b0 1d                        bcs     RTS3
c8f7: a8                           tay
c8f8: a9 c9                        lda     #>BELL
c8fa: 48                           pha
c8fb: b9 f2 cb                     lda     ESCTBL,y
c8fe: 48                           pha
c8ff: 60                           rts

c900: ea                           nop
c901: ac 7b 05     CLREOL          ldy     CHORZ             ;Put cursor horizontal into Y
c904: a9 a0        CLEOLZ          lda     #$a0              ;Use a space
c906: 20 71 ca     CLEOL2          jsr     CHRPUT            ;Put character on screen
c909: c8                           iny
c90a: c0 50                        cpy     #80               ;Continue until
c90c: 90 f8                        bcc     CLEOL2            ;Y >= 80
c90e: 60                           rts

c90f: a9 34        LEADIN          lda     #$34              ;Set lead in bit
c911: 8d 7b 07     PSAVE           sta     POFF
c914: 60           RTS3            rts

c915: a9 32        GOXY1           lda     #$32              ;Set lead in count to 2
c917: d0 f8                        bne     PSAVE

c919: a0 c0        BELL            ldy     #$c0              ;Beep the speaker
c91b: a2 80        BELL1           ldx     #$80
c91d: ca           BELL2           dex
c91e: d0 fd                        bne     BELL2
c920: ad 30 c0                     lda     SPKR
c923: 88                           dey
c924: d0 f5                        bne     BELL1
c926: 60                           rts

                   ********************************************************************************
                   * Store character on screen and advance cursor                                 *
                   ********************************************************************************
c927: ac 7b 05     STOADV          ldy     CHORZ
c92a: c0 50                        cpy     #80
c92c: 90 05                        bcc     NOT81
c92e: 48                           pha
c92f: 20 b0 c9                     jsr     CRLF
c932: 68                           pla
c933: ac 7b 05     NOT81           ldy     CHORZ
c936: 20 71 ca                     jsr     CHRPUT            ;Place character on screen
c939: ee 7b 05     ADVANCE         inc     CHORZ             ;Increment cursor horizontal index
c93c: 2c 78 04                     bit     CRFLAG
c93f: 10 07                        bpl     RTS8
c941: ad 7b 05                     lda     CHORZ
c944: c9 50                        cmp     #80
c946: b0 68                        bcs     CRLF
c948: 60           RTS8            rts

                   ********************************************************************************
                   * Clear to end of page                                                         *
                   ********************************************************************************
c949: ac 7b 05     CLREOP          ldy     CHORZ             ;Get cursor horizontal into Y
c94c: ad fb 05                     lda     CVERT             ;Get cursor vertical into A
c94f: 48           CLEOP1          pha                       ;Save current line on stack
c950: 20 07 ca                     jsr     VTABZ             ;Calculate base address
c953: 20 04 c9                     jsr     CLEOLZ            ;Clear to end of line, set carry
c956: a0 00                        ldy     #$00              ;Clear from horizontal index 0
c958: 68                           pla
c959: 69 00                        adc     #$00              ;Increment current line (C=1)
c95b: c9 18                        cmp     #24               ;Done to bottom of window?
c95d: 90 f0                        bcc     CLEOP1            ;If not keep clearing lines
c95f: b0 23                        bcs     JVTAB             ;Vertical tab to cursor position

                   ********************************************************************************
                   * Clear screen                                                                 *
                   ********************************************************************************
c961: 20 67 c9     CLSCRN          jsr     HOME              ;Home cursor
c964: 98                           tya
c965: f0 e8                        beq     CLEOP1            ;Clear to end of page
                   ********************************************************************************
                   * Home cursor                                                                  *
                   ********************************************************************************
c967: a9 00        HOME            lda     #$00              ;Set cursor position to 0,0
c969: 8d 7b 05                     sta     CHORZ
c96c: 8d fb 05                     sta     CVERT
c96f: a8                           tay
c970: f0 12                        beq     JVTAB             ;Vertical tab to cursor position
c972: ce 7b 05     BS              dec     CHORZ             ;Decrement cursor horizontal index
c975: 10 9d                        bpl     RTS3              ;If pos, OK. Else move up
c977: a9 4f                        lda     #79               ;Set cursor horizontal to
c979: 8d 7b 05                     sta     CHORZ             ;rightmost screen position
                   ********************************************************************************
                   * Move cursor up                                                               *
                   ********************************************************************************
c97c: ad fb 05     UP              lda     CVERT             ;Get cursor vertical index
c97f: f0 93                        beq     RTS3              ;If top line then return
c981: ce fb 05                     dec     CVERT             ;Decrement cursor vertical index
c984: 4c 04 ca     JVTAB           jmp     VTAB              ;Vertical tab to cursor position

c987: a9 30        NOTGOXY         lda     #$30              ;Clear lead in bits
c989: 8d 7b 07                     sta     POFF
c98c: 68                           pla                       ;Recover character
c98d: 09 80                        ora     #$80
c98f: c9 b1                        cmp     #‘1’ | $80
c991: d0 67                        bne     NOT0
c993: a9 08                        lda     #$08
c995: 8d 58 c0                     sta     SETAN0
c998: d0 5b                        bne     FLGSET

c99a: c9 b2        NOT1            cmp     #‘2’ | $80
c99c: d0 51                        bne     NOT2
c99e: a9 fe        LOLITE          lda     #$fe
c9a0: 2d fb 07     FLGCLR          and     FLAGS
c9a3: 8d fb 07     FLGSAV          sta     FLAGS
c9a6: 60                           rts

                   ********************************************************************************
                   *                                                                              *
                   * Pascal output entry point                                                    *
                   *                                                                              *
                   ********************************************************************************
c9a7: 8d 7b 06     PSOUT           sta     BYTE
c9aa: 4e 78 04                     lsr     CRFLAG
c9ad: 4c cb c8                     jmp     PSCLOUT           ;Jump for Pascal entry

                   ********************************************************************************
                   *                                                                              *
                   * CR LF routine                                                                *
                   ********************************************************************************
c9b0: 20 27 ca     CRLF            jsr     CR
c9b3: ee fb 05     LF              inc     CVERT             ;Increment cursor vertical
c9b6: ad fb 05                     lda     CVERT
c9b9: c9 18                        cmp     #24               ;Off screen?
c9bb: 90 4a                        bcc     VTABZ             ;If not move cursor
c9bd: ce fb 05                     dec     CVERT             ;If so decrement cursor vertical
                   ; 
c9c0: ad fb 06                     lda     START             ;Increment the start address
c9c3: 69 04                        adc     #$04              ;by one line
c9c5: 29 7f                        and     #$7f
c9c7: 8d fb 06                     sta     START
c9ca: 20 12 ca                     jsr     BASCLC1           ;Calculate the start address
c9cd: a9 0d                        lda     #$0d              ;Set up CRTC address
c9cf: 8d b0 c0                     sta     DEV0              ;for start low address
c9d2: ad 7b 04                     lda     BASEL             ;Get start low
c9d5: 8d b1 c0                     sta     DEV1              ;Save start low
c9d8: a9 0c                        lda     #$0c              ;Set up CRTC address
c9da: 8d b0 c0                     sta     DEV0              ;for start high address
c9dd: ad fb 04                     lda     BASEH             ;Get start high
c9e0: 8d b1 c0                     sta     DEV1              ;Save start high
c9e3: a9 17                        lda     #23               ;Put window bottom-1 into A
c9e5: 20 07 ca                     jsr     VTABZ             ;Calculate base address
c9e8: a0 00                        ldy     #$00
c9ea: 20 04 c9                     jsr     CLEOLZ            ;Clear bottom line
c9ed: b0 95                        bcs     JVTAB             ;Move cursor back
                   ; 
c9ef: c9 b3        NOT2            cmp     #‘3’ | $80
c9f1: d0 0e                        bne     JSTOADV
c9f3: a9 01        HILITE          lda     #$01
c9f5: 0d fb 07     FLGSET          ora     FLAGS
c9f8: d0 a9                        bne     FLGSAV
                   ********************************************************************************
                   *                                                                              *
                   * Basic initial I/O entry point                                                *
                   *                                                                              *
                   *                                                                              *
                   ********************************************************************************
c9fa: c9 b0        NOT0            cmp     #‘0’ | $80
c9fc: d0 9c                        bne     NOT1
c9fe: 4c 09 c8                     jmp     RESTART

ca01: 4c 27 c9     JSTOADV         jmp     STOADV

ca04: ad fb 05     VTAB            lda     CVERT             ;Get cursor vertical
ca07: 8d f8 04     VTABZ           sta     ASAV1             ;Multiply A by 5
ca0a: 0a                           asl     A
ca0b: 0a                           asl     A
ca0c: 6d f8 04                     adc     ASAV1
ca0f: 6d fb 06                     adc     START             ;Add start
ca12: 48           BASCLC1         pha                       ;Save A
ca13: 4a                           lsr     A                 ;Calculate BASEH
ca14: 4a                           lsr     A
ca15: 4a                           lsr     A
ca16: 4a                           lsr     A
ca17: 8d fb 04                     sta     BASEH
ca1a: 68                           pla                       ;Recover A
ca1b: 0a                           asl     A                 ;Calculate BASEL
ca1c: 0a                           asl     A
ca1d: 0a                           asl     A
ca1e: 0a                           asl     A
ca1f: 8d 7b 04                     sta     BASEL
ca22: 60           RTS2            rts

ca23: c9 0d        VIDOUT          cmp     #$0d
ca25: d0 06                        bne     VDOUT1
ca27: a9 00        CR              lda     #$00
ca29: 8d 7b 05                     sta     CHORZ
ca2c: 60                           rts

ca2d: 09 80        VDOUT1          ora     #$80              ;Set high bit
ca2f: c9 a0                        cmp     #$a0
ca31: b0 ce                        bcs     JSTOADV           ;If not control print it
ca33: c9 87                        cmp     #$87
ca35: 90 08                        bcc     RTS4              ;CTRL @ - F
ca37: a8                           tay
ca38: a9 c9                        lda     #>BELL
ca3a: 48                           pha
ca3b: b9 b9 c9                     lda     CTLTBL-135,y
ca3e: 48                           pha
ca3f: 60           RTS4            rts

ca40: 18           CTLTBL          .dd1    <BELL-1
ca41: 71                           .dd1    <BS-1
ca42: 13                           .dd1    <RTS3-1
ca43: b2                           .dd1    <LF-1
ca44: 48                           .dd1    <CLREOP-1
ca45: 60                           .dd1    <CLSCRN-1
ca46: af                           .dd1    <CRLF-1
ca47: 9d                           .dd1    <LOLITE-1
ca48: f2                           .dd1    <HILITE-1
ca49: 13                           .dd1    <RTS3-1
ca4a: 13                           .dd1    <RTS3-1
ca4b: 13                           .dd1    <RTS3-1
ca4c: 13                           .dd1    <RTS3-1
ca4d: 13                           .dd1    <RTS3-1
ca4e: 13                           .dd1    <RTS3-1
ca4f: 13                           .dd1    <RTS3-1
ca50: 13                           .dd1    <RTS3-1
ca51: 13                           .dd1    <RTS3-1
ca52: 66                           .dd1    <HOME-1
ca53: 0e                           .dd1    <LEADIN-1
ca54: 13                           .dd1    <RTS3-1
ca55: 38                           .dd1    <ADVANCE-1
ca56: 00                           .dd1    <CLREOL-1
ca57: 14                           .dd1    <GOXY1-1
ca58: 7b                           .dd1    <UP-1

                   ********************************************************************************
                   * Calculate screen address and switch in correct page                          *
                   *                                                                              *
                   ********************************************************************************
ca59: 18           PSNCALC         clc
ca5a: 98                           tya
ca5b: 6d 7b 04                     adc     BASEL
ca5e: 48                           pha
ca5f: a9 00                        lda     #$00              ;Calculate screen address high
ca61: 6d fb 04                     adc     BASEH
ca64: 48                           pha
ca65: 0a                           asl     A
ca66: 29 0c                        and     #$0c              ;Use bit 0 and 1 for paging
ca68: aa                           tax
ca69: bd b0 c0                     lda     DEV0,x            ;Set correct screen page
ca6c: 68                           pla
ca6d: 4a                           lsr     A
ca6e: 68                           pla
ca6f: aa                           tax
ca70: 60                           rts

                   ********************************************************************************
                   *                                                                              *
                   * Put a character at CVERT, CHORZ                                              *
                   *                                                                              *
                   ********************************************************************************
ca71: 0a           CHRPUT          asl     A
ca72: 48                           pha                       ;Save shifted character
ca73: ad fb 07                     lda     FLAGS             ;Get character set flag
ca76: 4a                           lsr     A                 ;Shift it into carry
ca77: 68                           pla                       ;Recover shifted character
ca78: 6a                           ror     A                 ;Rotate carry into character
ca79: 48                           pha                       ;Save character
ca7a: 20 59 ca                     jsr     PSNCALC           ;Set up screen address
ca7d: 68                           pla                       ;Recover character
ca7e: b0 05                        bcs     WRITE1            ;Select memory range
ca80: 9d 00 cc                     sta     DISP0,x           ;Store character on screen
ca83: 90 03                        bcc     WSKIP             ;Skip

ca85: 9d 00 cd     WRITE1          sta     DISP1,x           ;Store character on screen
ca88: 60           WSKIP           rts                       ;Recover X register

                   ********************************************************************************
                   *                                                                              *
                   * General output routine                                                       *
                   *                                                                              *
                   ********************************************************************************
ca89: 48           OUTPT1          pha                       ;Save character
ca8a: a9 f7                        lda     #$f7
ca8c: 20 a0 c9                     jsr     FLGCLR
ca8f: 8d 59 c0                     sta     CLRAN0
ca92: ad 7b 07                     lda     POFF
ca95: 29 07                        and     #$07              ;Check for lead in
ca97: d0 04                        bne     LEAD              ;Branch for lead in
ca99: 68                           pla                       ;Recover character
ca9a: 4c 23 ca                     jmp     VIDOUT            ;Output character

ca9d: 29 04        LEAD            and     #$04              ;Check for go to XY
ca9f: f0 03                        beq     GOXY3             ;If not skip
caa1: 4c 87 c9                     jmp     NOTGOXY

caa4: 68           GOXY3           pla                       ;Recover character
caa5: 38                           sec
caa6: e9 20                        sbc     #$20              ;Subtract 32
caa8: 29 7f                        and     #$7f              ;Strip off unneeded bits
caaa: 48                           pha                       ;Save A
caab: ce 7b 07                     dec     POFF              ;Decrement lead in counter
caae: ad 7b 07                     lda     POFF
cab1: 29 03                        and     #$03              ;Get count
cab3: d0 15                        bne     GOXY2             ;Skip if count not zero
cab5: 68                           pla                       ;Recover A
cab6: c9 18                        cmp     #24               ;If A > window bottom
cab8: b0 03                        bcs     BADY              ;Then don't move cursor vertical
caba: 8d fb 05                     sta     CVERT
cabd: ad f8 05     BADY            lda     TEMPX             ;Get cursor horizontal parameter
cac0: c9 50                        cmp     #80               ;If A > 80 then
cac2: b0 03                        bcs     BADX              ;don't move cursor horizontal
cac4: 8d 7b 05                     sta     CHORZ
cac7: 4c 04 ca     BADX            jmp     VTAB              ;Vertical tab to cursor position

caca: 68           GOXY2           pla                       ;Recover A
cacb: 8d f8 05                     sta     TEMPX             ;Save cursor horizontal parameter
cace: 60                           rts

                   ********************************************************************************
                   *                                                                              *
                   * Stop list routine                                                            *
                   *                                                                              *
                   ********************************************************************************
cacf: ad 00 c0     STPLST          lda     KBD
cad2: c9 93                        cmp     #$93
cad4: d0 0f                        bne     STPDONE
cad6: 2c 10 c0                     bit     KBDSTRB
cad9: ad 00 c0     STPLOOP         lda     KBD
cadc: 10 fb                        bpl     STPLOOP
cade: c9 83                        cmp     #$83
cae0: f0 03                        beq     STPDONE
cae2: 2c 10 c0                     bit     KBDSTRB
cae5: 60           STPDONE         rts

cae6: a8           ESCNOW          tay
cae7: b9 31 cb                     lda     XLTBL-201,y
caea: 20 f1 c8                     jsr     ESC1
caed: 20 44 c8     ESCNEW          jsr     RDKEY
caf0: c9 ce                        cmp     #$ce
caf2: b0 08                        bcs     ESC2
caf4: c9 c9                        cmp     #$c9
caf6: 90 04                        bcc     ESC2
caf8: c9 cc                        cmp     #$cc
cafa: d0 ea                        bne     ESCNOW
cafc: 4c f1 c8     ESC2            jmp     ESC1

caff: ea                           nop
                   ********************************************************************************
                   *                                                                              *
                   *                                                                              *
                   *                                                                              *
                   *                                                                              *
                   * Basic initial I/O entry point                                                *
                   *                                                                              *
                   ********************************************************************************
cb00: 2c cb ff                     bit     IORTS             ;Set VFlag on initial entry
cb03: 70 31                        bvs     ENTR
cb05: 38           INFAKE          sec                       ;Fake input entry C=0
cb06: 90                           .dd1    $90
cb07: 18           OUTENTR         clc                       ;Output entry C=1
cb08: b8                           clv
cb09: 50 2b                        bvc     ENTR

cb0b: 01                           .dd1    $01
cb0c: 82                           .dd1    $82
cb0d: 11                           .dd1    <INIT
cb0e: 14                           .dd1    <READ
cb0f: 1c                           .dd1    <WRITE
cb10: 22                           .dd1    <STATUS

cb11: 4c 00 c8     INIT            jmp     SETUP

cb14: 20 44 c8     READ            jsr     RDKEY
cb17: 29 7f                        and     #$7f
cb19: a2 00                        ldx     #$00
cb1b: 60                           rts

cb1c: 20 a7 c9     WRITE           jsr     PSOUT
cb1f: a2 00                        ldx     #$00
cb21: 60                           rts

cb22: c9 00        STATUS          cmp     #$00
cb24: f0 09                        beq     STEXIT
cb26: ad 00 c0                     lda     KBD
cb29: 0a                           asl     A
cb2a: 90 03                        bcc     STEXIT
cb2c: 20 5c c8                     jsr     KEYSTAT
cb2f: a2 00        STEXIT          ldx     #$00
cb31: 60                           rts

                   ********************************************************************************
                   * Basic input entry point                                                      *
                   ********************************************************************************
cb32: 91 28        INENTR          sta     (MON_BASL),y      ;Replace flashing cursor
cb34: 38                           sec
cb35: b8                           clv
cb36: 8d ff cf     ENTR            sta     CLRROM            ;Turn off co-resident memory
                   ********************************************************************************
                   *                                                                              *
                   *                                                                              *
                   * Save registers, set up NO and CN                                             *
                   *                                                                              *
                   ********************************************************************************
cb39: 48           WHERE           pha                       ;Save registers on stack
cb3a: 85 35                        sta     XSAVE
cb3c: 8a                           txa
cb3d: 48                           pha
cb3e: 98                           tya
cb3f: 48                           pha
cb40: a5 35                        lda     XSAVE             ;Save character
cb42: 86 35                        stx     XSAVE             ;Save input buffer index
cb44: a2 c3                        ldx     #$c3
cb46: 8e 78 04                     stx     CRFLAG
cb49: 48                           pha
cb4a: 50 10                        bvc     IO                ;Go to IO if not initial entry
                   ********************************************************************************
                   *                                                                              *
                   * Basic initialize                                                             *
                   *                                                                              *
                   ********************************************************************************
cb4c: a9 32                        lda     #<INENTR
cb4e: 85 38                        sta     MON_KSWL
cb50: 86 39                        stx     MON_KSWH
cb52: a9 07                        lda     #<OUTENTR
cb54: 85 36                        sta     MON_CSWL
cb56: 86 37                        stx     MON_CSWH
cb58: 20 00 c8                     jsr     SETUP
cb5b: 18                           clc
cb5c: 90 6f        IO              bcc     BASOUT
                   ********************************************************************************
                   *                                                                              *
                   * Basic input routine                                                          *
                   *                                                                              *
                   ********************************************************************************
cb5e: 68           BASINP          pla                       ;Pop stack
cb5f: a4 35                        ldy     XSAVE             ;Get input buffer index
cb61: f0 1f                        beq     GETLN             ;If zero assume GETLN
cb63: 88                           dey
cb64: ad 78 06                     lda     OLDCHAR           ;Get last character from GETLN
cb67: c9 88                        cmp     #$88              ;If BS assume GETLN
cb69: f0 17                        beq     GETLN
cb6b: d9 00 02                     cmp     IN,y
cb6e: f0 12                        beq     GETLN
cb70: 49 20                        eor     #$20
cb72: d9 00 02                     cmp     IN,y              ;If same as character in input
cb75: d0 3b                        bne     NTGETLN           ;buffer then assume GETLN
cb77: ad 78 06                     lda     OLDCHAR           ;Get last character from GETLN
cb7a: 99 00 02                     sta     IN,y              ;Fix input buffer
cb7d: b0 03                        bcs     GETLN             ;Go to GETLN
cb7f: 20 ed ca     ESC             jsr     ESCNEW            ;Perform escape function
cb82: a9 80        GETLN           lda     #$80              ;Set GETLN flag
cb84: 20 f5 c9                     jsr     FLGSET
cb87: 20 44 c8                     jsr     RDKEY             ;Get character from keyboard
cb8a: c9 9b                        cmp     #$9b              ;Check for escape
cb8c: f0 f1                        beq     ESC
cb8e: c9 8d                        cmp     #$8d              ;Check for CR
cb90: d0 05                        bne     NOTCR             ;If not skip
cb92: 48                           pha                       ;Save character
cb93: 20 01 c9                     jsr     CLREOL            ;Clear to end of line
cb96: 68                           pla                       ;Recover character
cb97: c9 95        NOTCR           cmp     #$95              ;Check for pick
cb99: d0 12                        bne     NOTPICK           ;If not skip
cb9b: ac 7b 05                     ldy     CHORZ             ;Get cursor horizontal position
cb9e: 20 59 ca                     jsr     PSNCALC           ;Set up screen address
cba1: b0 05                        bcs     READ1             ;Read character from screen
cba3: bd 00 cc                     lda     DISP0,x
cba6: 90 03                        bcc     RSKIP

cba8: bd 00 cd     READ1           lda     DISP1,x
cbab: 09 80        RSKIP           ora     #$80              ;Set high bit
cbad: 8d 78 06     NOTPICK         sta     OLDCHAR           ;Save character in OLDCHAR
cbb0: d0 08                        bne     DONE              ;Exit

cbb2: 20 44 c8     NTGETLN         jsr     RDKEY             ;Get character from keyboard
cbb5: a0 00                        ldy     #$00              ;Clear OLDCHARacter
cbb7: 8c 78 06                     sty     OLDCHAR
cbba: ba           DONE            tsx                       ;Put character into stack
cbbb: e8                           inx
cbbc: e8                           inx
cbbd: e8                           inx
cbbe: 9d 00 01                     sta     $0100,x
cbc1: a9 00        OUTDONE1        lda     #$00              ;Set CH = 00
cbc3: 85 24        OUTDONE         sta     MON_CH
cbc5: ad fb 05                     lda     CVERT             ;Set CV = CVERT
cbc8: 85 25                        sta     MON_CV
cbca: 4c 2e c8                     jmp     EXIT

                   ********************************************************************************
                   *                                                                              *
                   * Primary Basic output routine                                                 *
                   *                                                                              *
                   ********************************************************************************
cbcd: 68           BASOUT          pla                       ;Recover character
cbce: ac fb 07                     ldy     FLAGS             ;Check GETLN flags
cbd1: 10 08                        bpl     BOUT              ;If clear then skip
cbd3: ac 78 06                     ldy     OLDCHAR           ;Get last character from GETLN
cbd6: c0 e0                        cpy     #$e0              ;If it is lower case then use it
cbd8: 90 01                        bcc     BOUT
cbda: 98                           tya
cbdb: 20 b1 c8     BOUT            jsr     BASOUT1           ;Output character
cbde: 20 cf ca                     jsr     STPLST
cbe1: a9 7f                        lda     #$7f              ;Clear the GETLN flag
cbe3: 20 a0 c9                     jsr     FLGCLR
cbe6: ad 7b 05                     lda     CHORZ             ;Get cursor horizontal
cbe9: e9 47                        sbc     #$47
cbeb: 90 d4                        bcc     OUTDONE1
cbed: 69 1f                        adc     #$1f
cbef: 18           FIXCH           clc
cbf0: 90 d1                        bcc     OUTDONE

cbf2: 60           ESCTBL          .dd1    <CLSCRN-1
cbf3: 38                           .dd1    <ADVANCE-1
cbf4: 71                           .dd1    <BS-1
cbf5: b2                           .dd1    <LF-1
cbf6: 7b                           .dd1    <UP-1
cbf7: 00                           .dd1    <CLREOL-1
cbf8: 48                           .dd1    <CLREOP-1
cbf9: 66                           .dd1    <HOME-1
cbfa: c4           XLTBL           .dd1    $c4
cbfb: c2                           .dd1    $c2
cbfc: c1                           .dd1    $c1
cbfd: ff                           .dd1    $ff
cbfe: c3                           .dd1    $c3
cbff: ea                           .dd1    $ea
                                   .adrend ↑ $c800

Symbol Table

No exported symbols found.