home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 28.2 KB | 1,740 lines |
- ;┴├┼-128/64 KERNEL CONSOLE DRIVER: HIGH LEVEL ╔/╧ & KEYBOARD
-
- CON╫IN╙TART .BUF 2
- CON╫IN╥OWS .BUF 1
- CON╫IN├OLS .BUF 1
- CON╥OW╔NC .BUF 2
- CON╠INE┴DDR .BUF 2
- CON├UR╥OW .BUF 1
- CON├UR├OL .BUF 1
-
- CON╨UT═ASK .BYTE $80 ;.BUF 1
- CON├HAR├OLOR .BYTE $0E ;.BUF 1
- CON├URSOR├OLOR .BYTE $07 ;.BUF 1
- CON╔GNORE├TRL .BYTE $00
-
- KEYLINE╬EXT = KEYLINE┬UF+0 ;(3)
- KEYLINE╨REV = KEYLINE┬UF+3 ;(3)
- KEYLINE╠EN = KEYLINE┬UF+6 ;(1)
- KEYLINE╞LAGS = KEYLINE┬UF+7 ;(1)
- KEYLINE = KEYLINE┬UF+8 ;(248)
- KEYLINE═AX = 248
-
- KEYLINE╨TR .BUF 1
- KEYLINE╨OS .BUF 1
- KEYLINE├OUNT .BUF 1
-
- .IF COMPUTER-64
- SHIFT╓ALUE = $D3
- .ELSE
- SHIFT╓ALUE = $28D
- .IFE
-
- CON╔NIT╠INE╬UM .BUF 1
- CON╚ISTBUF╙CAN╨TR .BUF 4
- CON╚ISTBUF╥EPLACE╨TR .BUF 4
- CON╔NIT╨REV = SYSWORK+4
-
- CON╔NIT = *
- LDA CONFIG┬UF+$8E
- STA CON╙S═AX
- STA CON╙S├OUNTDOWN
- LDA #0
- STA KEYLINE├OUNT
- JSR KEYSCAN╔NIT
- LDA #ACE═EM╬ULL
- STA CON╚ISTBUF╙CAN╨TR+3
- STA CON╚ISTBUF╥EPLACE╨TR+3
- STA CON╔NIT╨REV+3
- LDA #$00
- STA CON╔NIT╨REV+0
- LDA CONFIG┬UF+$CB
- BNE +
- JMP CON╫IN╔NIT
- + STA CON╔NIT╠INE╬UM
-
- CON╔NIT╬EXT = *
- LDA CON╔NIT╠INE╬UM
- BNE +
- JMP CON╔NIT├LEAN╚IST
- + LDA #1
- LDX #$00 ;XXX GO FOR THE SLOW
- LDY #$FF
- JSR PAGEALLOC
- BCS CON╔NIT├LEAN╚IST
- ;** CHECK FIRST LINE
- LDA CON╚ISTBUF╥EPLACE╨TR+3
- CMP #ACE═EM╬ULL
- BNE +
- LDX #3
- - LDA MP,X
- STA CON╚ISTBUF╥EPLACE╨TR,X
- DEX
- BPL -
- ;** INITIALIZE LINE
- + LDX #2
- - LDA CON╚ISTBUF╥EPLACE╨TR+1,X
- STA KEYLINE╬EXT,X
- LDA CON╔NIT╨REV+1,X
- STA KEYLINE╨REV,X
- LDA MP+1,X
- STA CON╔NIT╨REV+1,X
- DEX
- BPL -
- LDA #0
- STA KEYLINE╠EN
- STA KEYLINE╞LAGS
- ;** STORE NEW LINE
- LDA #<KEYLINE┬UF
- LDY #>KEYLINE┬UF
- STA ZP+0
- STY ZP+1
- LDA #9
- LDY #0
- JSR STASH
- ;** LINK PREVIOUS LINE'S NEXT POINTER
- LDX #2
- - LDA KEYLINE╨REV,X
- STA MP+1,X
- DEX
- BPL -
- LDA #$00
- STA MP+0
- LDX #CON╔NIT╨REV+1
- LDY #3
- JSR ZPSTORE
- ;** GO ON TO NEXT LINE
- DEC CON╔NIT╠INE╬UM
- JMP CON╔NIT╬EXT
-
- CON╔NIT├LEAN╚IST = *
- LDA CON╚ISTBUF╥EPLACE╨TR+3
- CMP #ACE═EM╬ULL
- BEQ CON╫IN╔NIT
- ;** LINK FIRST LINE'S PREV PTR TO LAST LINE
- LDX #3
- - LDA CON╚ISTBUF╥EPLACE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #$03
- STA MP+0
- LDX #CON╔NIT╨REV+1
- LDY #3
- JSR ZPSTORE
- ;XX FALL THROUGH
-
- CON╫IN╔NIT = *
- JSR CON╫IN╨ARMS
- JMP CON├LS
-
- CON╫IN╨ARMS = *
- JSR WINSIZE
- STA CON╫IN╥OWS
- STX CON╫IN├OLS
- LDA SYSWORK+2
- LDY SYSWORK+3
- STA CON╫IN╙TART+0
- STY CON╫IN╙TART+1
- LDA SYSWORK+4
- LDY SYSWORK+5
- STA CON╥OW╔NC+0
- STY CON╥OW╔NC+1
- RTS
-
- CON├LS = *
- LDA #$E0
- LDX #" "
- LDY CON├HAR├OLOR
- JSR WINCLS
- JSR CON╚OME
- RTS
-
- CON╙HUTDOWN = *
- RTS
-
- CON╫IN├HANGE├ALLBACK = *
- JSR CON╫IN╨ARMS
- JMP CON╚OME
- RTS
-
- CON╚OME = *
- LDA CON╫IN╙TART+0
- LDY CON╫IN╙TART+1
- STA CON╠INE┴DDR+0
- STY CON╠INE┴DDR+1
- LDA #0
- STA CON├UR╥OW
- STA CON├UR├OL
- RTS
-
- CON╨UT╙AVE .BUF 1
-
- CON╨UTCHAR = * ;( .┴=CHAR )
- CMP #CHR├╥
- BEQ CON╬EWLINE
- CMP #CHR├╠╥
- BEQ CON├LS
- CMP #CHR╘┴┬
- BNE +
- JMP CON╘AB
- + CMP #CHR┬╙
- BNE +
- JMP CON┬ACKSPACE
- + CMP #CHR┬┼╠
- BNE +
- JMP CON┬ELL
- + CMP #CHR╠╞
- BNE CON╨UTCHAR╠IT
- JMP CON╠INEFEED
-
- CON╨UTCHAR╠IT = * ;( .┴=CHAR )
- STA CON╨UT╙AVE
- LDA CON├UR├OL
- CMP CON╫IN├OLS
- BCC +
- JSR CON╬EWLINE
- + CLC
- LDA CON╠INE┴DDR+0
- ADC CON├UR├OL
- STA SYSWORK+0
- LDA CON╠INE┴DDR+1
- ADC #0
- STA SYSWORK+1
- LDA #<CON╨UT╙AVE
- LDY #>CON╨UT╙AVE
- STA SYSWORK+2
- STY SYSWORK+3
- LDX #1
- STX SYSWORK+5
- LDA CON╨UT═ASK
- LDY CON├HAR├OLOR
- JSR WINPUT
- INC CON├UR├OL
- RTS
-
- CON╟ET├URSOR┴DDR = *
- CLC
- LDA CON╠INE┴DDR+0
- ADC CON├UR├OL
- STA SYSWORK+0
- LDA CON╠INE┴DDR+1
- ADC #0
- STA SYSWORK+1
- RTS
-
- CON╙YNCH├URSOR = *
- LDA CON├UR├OL
- CMP CON╫IN├OLS
- BCC +
- JSR CON╬EWLINE
- + RTS
-
- CON╬EWLINE = *
- LDA CON╔GNORE├TRL
- BMI +
- - LDA SHIFT╓ALUE
- AND #$0F
- CMP #$04
- BEQ -
- LDA SCROLL╞REEZE
- BNE -
- + LDA #0
- STA CON├UR├OL
- INC CON├UR╥OW
- LDA CON├UR╥OW
- CMP CON╫IN╥OWS
- BCS +
- CLC
- LDA CON╠INE┴DDR+0
- ADC CON╥OW╔NC+0
- STA CON╠INE┴DDR+0
- LDA CON╠INE┴DDR+1
- ADC CON╥OW╔NC+1
- STA CON╠INE┴DDR+1
- CLC
- RTS
- + DEC CON├UR╥OW
- JSR CON╙CROLL
- CLC
- RTS
-
- CON╙CROLL = *
- LDA #20
- STA SCROLL├OUNTDOWN
- - LDA SHIFT╓ALUE
- AND #%10
- BEQ +
- CLI
- LDA SCROLL├OUNTDOWN
- BNE -
- + LDA #" "
- STA SYSWORK+4
- LDA CON╨UT═ASK
- ORA #$08
- LDX #1
- LDY CON├HAR├OLOR
- JSR WINSCROLL
- RTS
-
- CON╘AB = *
- LDA CON├UR├OL
- AND #7
- STA SYSWORK+0
- SEC
- LDA #8
- SBC SYSWORK+0
- CLC
- ADC CON├UR├OL
- CMP CON╫IN├OLS
- BCC +
- LDA CON╫IN├OLS
- + STA CON├UR├OL
- RTS
-
- CON╠INEFEED = *
- LDA #0
- STA CON├UR├OL
- RTS
-
- CON┬ELL = *
- LDA #$15
- STA $D418
- LDY #$09
- LDX #$00
- STY $D405
- STX $D406
- LDA #$30
- STA $D401
- LDA #$20
- STA $D404
- LDA #$21
- STA $D404
- RTS
-
- ;*** CON╫RITE( (ZP)=BUF, .┴┘=WRITE╠ENGTH ) **ZW GETS MODIFIED**
-
- CON╫RITE╨TR = SYSWORK+8
- CON╫RITE╠ENGTH = SYSWORK+10
- CON╫RITE╘EMP = SYSWORK+12
-
- CON╫RITE = *
- STA CON╫RITE╠ENGTH+0
- STY CON╫RITE╠ENGTH+1
- LDA ZP+0
- LDY ZP+1
- STA CON╫RITE╨TR+0
- STY CON╫RITE╨TR+1
-
- CON╫RITE╬EXT├HUNK = *
- LDA #255
- LDX CON╫RITE╠ENGTH+1
- BNE +
- LDA CON╫RITE╠ENGTH+0
- BEQ CON╫RITE╞INISH
- + JSR CON╫RITE├HUNK
- STA CON╫RITE╘EMP
- CLC
- ADC CON╫RITE╨TR+0
- STA CON╫RITE╨TR+0
- BCC +
- INC CON╫RITE╨TR+1
- + SEC
- LDA CON╫RITE╠ENGTH+0
- SBC CON╫RITE╘EMP
- STA CON╫RITE╠ENGTH+0
- BCS +
- DEC CON╫RITE╠ENGTH+1
- + JMP CON╫RITE╬EXT├HUNK
-
- CON╫RITE╞INISH = *
- CLC
- RTS
-
- CON╫R├HK═AX╠EN .BUF 1
-
- CON╫RITE├HUNK = * ;( CON╫RITE╨TR, .┴=DATA╠EN ) : .┴=DATA╫RITTEN
- STA CON╫R├HK═AX╠EN
- - SEC
- LDA CON╫IN├OLS
- SBC CON├UR├OL
- BNE +
- JSR CON╫RITE╬EWLINE
- LDY #0
- LDA (CON╫RITE╨TR),Y
- CMP #CHR├╥
- BNE -
- LDA #1
- RTS
- + CMP CON╫R├HK═AX╠EN
- BCS +
- STA CON╫R├HK═AX╠EN
- + LDY #0
-
- - LDA (CON╫RITE╨TR),Y
- CMP #21
- BCS ++
- - CPY #0
- BNE CON╫R├HK╞LUSH
- CMP #CHR├╥
- BNE +
- JSR CON╫RITE╬EWLINE
- LDA #1
- RTS
- + JSR CON╨UTCHAR
- LDA #1
- RTS
- + CMP #147
- BEQ -
- INY
- CPY CON╫R├HK═AX╠EN
- BCC --
-
- CON╫R├HK╞LUSH = *
- STY CON╫R├HK═AX╠EN
- CLC
- LDA CON╠INE┴DDR+0
- ADC CON├UR├OL
- STA SYSWORK+0
- LDA CON╠INE┴DDR+1
- ADC #0
- STA SYSWORK+1
- LDA CON╫RITE╨TR+0
- LDX CON╫RITE╨TR+1
- STA SYSWORK+2
- STX SYSWORK+3
- STY SYSWORK+5
- LDA CON╨UT═ASK
- LDY CON├HAR├OLOR
- LDX SYSWORK+5
- JSR WINPUT
- CLC
- LDA CON├UR├OL
- ADC CON╫R├HK═AX╠EN
- STA CON├UR├OL
- LDA CON╫R├HK═AX╠EN
- RTS
-
- ;*** CON╥EAD( (ZP)=BUF, .┴┘=READ═AX╠EN ) : .┴┘=(ZW)=LEN, .┌
-
- CON╥EAD = *
- STA READ═AX╠EN+0
- STY READ═AX╠EN+1
- LDA #0
- STA READ╠ENGTH+0
- STA READ╠ENGTH+1
- LDA ZP+0
- LDY ZP+1
- STA READ╨TR+0
- STY READ╨TR+1
-
- CON╥EAD╠OOP = *
- LDA READ╠ENGTH+0
- CMP READ═AX╠EN+0
- LDA READ╠ENGTH+1
- SBC READ═AX╠EN+1
- BCS CON╥EAD┼XIT
- JSR KEYLINE╟ET
- BCS CON╥EAD┼OF┼XIT
- LDY #0
- STA (READ╨TR),Y
- INC READ╨TR+0
- BNE +
- INC READ╨TR+1
- + INC READ╠ENGTH+0
- BNE +
- INC READ╠ENGTH+1
- + CMP #$0D
- BEQ CON╥EAD┼XIT
- JMP CON╥EAD╠OOP
-
- CON╥EAD┼XIT = *
- LDA READ╠ENGTH+0
- LDY READ╠ENGTH+1
- STA ZW+0
- STY ZW+1
- LDX #$FF
- CLC
- RTS
-
- CON╥EAD┼OF┼XIT = *
- LDA #0
- LDY #0
- STA ZW+0
- STY ZW+1
- CLC
- RTS
-
- KEYLINE╟ET = * ;( KEYLINE╨TR, KEYLINE├OUNT ) : .┴=CHAR, .├╙=EOF
- LDA KEYLINE├OUNT
- BNE +
- JSR CON╔NPUT
- BCS ++
- + LDX KEYLINE╨TR
- INC KEYLINE╨TR
- DEC KEYLINE├OUNT
- LDA KEYLINE,X
- CLC
- + RTS
-
- CON╨ARM╙AVE .BUF 8
- CON╨ARM═P .BUF 4
- CON╨ARM┌P .BUF 2
-
- CON╔NPUT = *
- LDX #7
- - LDA SYSWORK,X
- STA CON╨ARM╙AVE,X
- DEX
- BPL -
- LDX #0
- STX KEYLINE╨TR
- STX KEYLINE╨OS
- STX KEYLINE├OUNT
- LDA #$00
- STA CON╚ISTBUF╥EPLACE╨TR+0
- LDX #3
- - LDA CON╚ISTBUF╥EPLACE╨TR,X
- STA CON╚ISTBUF╙CAN╨TR,X
- LDA MP,X
- STA CON╨ARM═P,X
- LDA CON╚ISTBUF╥EPLACE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #$06
- STA MP+0
- LDA #0
- STA SYSWORK
- LDX #SYSWORK
- LDY #1
- JSR ZPSTORE
- LDA #$00
- STA MP+0
- LDX #1
- - LDA ZP,X
- STA CON╨ARM┌P,X
- DEX
- BPL -
-
- CON╔N╬EXT = *
- JSR CON╙YNCH├URSOR
- JSR CON├URSOR╧N
- JSR CON╟ETKEY
- JSR CON├URSOR╧FF
- CMP #$0D
- BNE +
- JMP CON╔N╥ETURN
- + CMP #$14 ;BACKSPACE
- BNE +
- JMP CON╔N┬ACKSPACE
- + CMP #$03 ;STOP
- BEQ CON╔N╬EXT
- CMP #147 ;CLEAR
- BNE +
- JMP CON╔N├LEAR
- + CMP #$E4
- BNE +
- LDX KEYLINE├OUNT
- BNE +
- JSR CON╥ESTORE╨ARMS
- SEC
- RTS
- + CMP #$F5 ;CT-U
- BNE +
- JMP CON╔N╦ILL
- + CMP #29 ;RIGHT
- BNE +
- JMP CON╔N╥IGHT
- + CMP #157 ;LEFT
- BNE +
- JMP CON╔N╠EFT
- + CMP #$10 ;CO-LEFT
- BNE +
- - JMP CON╔N┬OL
- + CMP #$EA ;CT-J
- BEQ -
- CMP #$15 ;CO-RIGHT
- BNE +
- - JMP CON╔N┼OL
- + CMP #$EB ;CT-K
- BEQ -
- CMP #$F2 ;CT-R
- BNE +
- JMP CON╔N╥EDISPLAY
- + CMP #145 ;UP
- BNE +
- JMP CON╔N╨REV╠INE
- + CMP #17 ;DOWN
- BNE +
- JMP CON╔N╬EXT╠INE
- + LDX KEYLINE├OUNT
- CPX #KEYLINE═AX
- BCC +
- JSR CON┬ELL
- JMP CON╔N╬EXT
- + PHA
- ;** INSERT SPACE FOR NEW CHAR
- INX
- STX KEYLINE├OUNT
- - LDA KEYLINE-1,X
- STA KEYLINE,X
- DEX
- BEQ +
- CPX KEYLINE╨OS
- BCS -
- BEQ -
- + PLA
- LDX KEYLINE╨OS
- STA KEYLINE,X
- INC KEYLINE╨OS
- JSR CON╨UTCHAR╠IT
- JSR CON╔N╙LOSH
- JSR CON╔N┬ACKUP
- JSR CON╔N╙AVE╠INE
- JMP CON╔N╬EXT
-
- CON╔N╥ETURN = *
- JSR CON╔N╙AVE╠INE
- JSR CON╔N╙LOSH
- LDA #CHR├╥
- LDX KEYLINE├OUNT
- STA KEYLINE,X
- INC KEYLINE├OUNT
- JSR CON╨UTCHAR
- LDX #0
- STX KEYLINE╨TR
- LDA KEYLINE╠EN
- BEQ +
- LDX #3
- - LDA CON╚ISTBUF╥EPLACE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #<KEYLINE┬UF
- LDY #>KEYLINE┬UF
- STA ZP+0
- STY ZP+1
- LDA #3
- LDY #0
- JSR FETCH
- LDX #2
- - LDA KEYLINE╬EXT,X
- STA CON╚ISTBUF╥EPLACE╨TR+1,X
- DEX
- BPL -
- + JSR CON╥ESTORE╨ARMS
- CLC
- RTS
-
- CON╔N├LEAR = *
- JSR CON╨UTCHAR
- LDA #0
- STA KEYLINE╨OS
- STA KEYLINE├OUNT
- JMP CON╔N╬EXT
-
- CON╔N┬ACKSPACE = *
- LDX KEYLINE╨OS
- BNE +
- JMP CON╔N╬EXT
- + DEC KEYLINE╨OS
- DEC KEYLINE├OUNT
- LDX KEYLINE╨OS
- JMP +
- - LDA KEYLINE+1,X
- STA KEYLINE,X
- INX
- + CPX KEYLINE├OUNT
- BCC -
- JSR CON┬ACKSPACE
- JSR CON╔N╙LOSH
- PHA
- LDA #" "
- JSR CON╨UTCHAR
- PLA
- CLC
- ADC #1
- JSR CON╔N┬ACKUP
- JSR CON╔N╙AVE╠INE
- JMP CON╔N╬EXT
-
- CON╔N╠EFT = *
- LDA KEYLINE╨OS
- BEQ +
- JSR CON┬ACKSPACE
- DEC KEYLINE╨OS
- + JMP CON╔N╬EXT
-
- CON╔N╥IGHT = *
- LDX KEYLINE╨OS
- CPX KEYLINE├OUNT
- BEQ +
- LDA KEYLINE,X
- JSR CON╨UTCHAR
- INC KEYLINE╨OS
- + JMP CON╔N╬EXT
-
- CON╔N┬OL = *
- LDA KEYLINE╨OS
- JSR CON╔N┬ACKUP
- LDA #0
- STA KEYLINE╨OS
- JMP CON╔N╬EXT
-
- CON╔N┼OL = *
- JSR CON╔N╙LOSH
- LDA KEYLINE├OUNT
- STA KEYLINE╨OS
- JMP CON╔N╬EXT
-
- CON╔N╥EDISPLAY = *
- LDA KEYLINE╨OS
- PHA
- JSR CON╔N┬ACKUP
- LDA #0
- STA KEYLINE╨OS
- JSR CON╔N╙LOSH
- PLA
- STA KEYLINE╨OS
- SEC
- LDA KEYLINE├OUNT
- SBC KEYLINE╨OS
- JSR CON╔N┬ACKUP
- JMP CON╔N╬EXT
-
- CON╔N╦ILL = *
- JSR CON╔N╦ILL╙UB
- JMP CON╔N╬EXT
- CON╔N╦ILL├NT .BUF 1
- CON╔N╦ILL╙UB = *
- ;** GOTO BEGINNING OF LINE
- LDA KEYLINE╨OS
- JSR CON╔N┬ACKUP
- ;** BLANK OUT LINE
- LDA #$FF
- STA CON╔GNORE├TRL
- LDA KEYLINE├OUNT
- STA CON╔N╦ILL├NT
- BEQ +
- - LDA #" "
- JSR CON╨UTCHAR
- DEC CON╔N╦ILL├NT
- BNE -
- ;** BACKUP
- + LDA KEYLINE├OUNT
- JSR CON╔N┬ACKUP
- LDA #$00
- STA CON╔GNORE├TRL
- ;** INTERNAL
- LDA #0
- STA KEYLINE╨OS
- STA KEYLINE├OUNT
- RTS
-
- CON╙LOSH╨TR .BUF 1
-
- CON╔N╙LOSH = * ;( ) : ┬╙COUNT ;SLOSH OUT LINE FROM KEYLINE╨OS TO KEYLINE├OUNT
- LDA #$FF
- STA CON╔GNORE├TRL
- LDA KEYLINE╨OS
- STA CON╙LOSH╨TR
- - LDX CON╙LOSH╨TR
- CPX KEYLINE├OUNT
- BCS +
- LDA KEYLINE,X
- JSR CON╨UTCHAR╠IT
- INC CON╙LOSH╨TR
- JMP -
- + LDA #$00
- STA CON╔GNORE├TRL
- SEC
- LDA KEYLINE├OUNT
- SBC KEYLINE╨OS
- RTS
-
- CON┬ACKUP├OUNT .BUF 1
-
- CON╔N┬ACKUP = * ;( .┴=COUNT ) ;BACKUP THE CURSOR .┴ SPACES
- STA CON┬ACKUP├OUNT
- CMP #0
- BEQ +
- - LDA #CHR┬╙
- JSR CON╨UTCHAR
- DEC CON┬ACKUP├OUNT
- BNE -
- + RTS
-
- CON╥ESTORE╨ARMS = *
- LDX #7
- - LDA CON╨ARM╙AVE,X
- STA SYSWORK,X
- DEX
- BPL -
- LDX #3
- - LDA CON╨ARM═P,X
- STA MP,X
- DEX
- BPL -
- LDX #1
- - LDA CON╨ARM┌P,X
- STA ZP,X
- DEX
- BPL -
- RTS
-
- CON╔N╬EXT╠INE = *
- ;** LOCATE NEXT SCAN LINE
- LDA CON╚ISTBUF╥EPLACE╨TR+3
- CMP #ACE═EM╬ULL
- BEQ +
- JSR CON╔N╠INE╞ETCH╚EAD
- LDX #2
- - LDA CON╚ISTBUF╙CAN╨TR+1,X
- CMP CON╚ISTBUF╥EPLACE╨TR+1,X
- BNE ++
- DEX
- BPL -
- + JMP CON╔N╬EXT
- + LDX #2
- - LDA KEYLINE╬EXT,X
- STA CON╚ISTBUF╙CAN╨TR+1,X
- STA MP+1,X
- DEX
- BPL -
- JMP +++
-
- CON╔N╨REV╠INE = *
- ;** LOCATE PREVIOUS SCAN LINE
- LDA CON╚ISTBUF╥EPLACE╨TR+3
- CMP #ACE═EM╬ULL
- BEQ +
- JSR CON╔N╠INE╞ETCH╚EAD
- LDX #2
- - LDA KEYLINE╨REV,X
- CMP CON╚ISTBUF╥EPLACE╨TR+1,X
- BNE ++
- DEX
- BPL -
- + JSR CON┬ELL
- JMP CON╔N╬EXT
- + LDX #2
- - LDA KEYLINE╨REV,X
- STA CON╚ISTBUF╙CAN╨TR+1,X
- STA MP+1,X
- DEX
- BPL -
- + LDA #$00
- STA MP+0
- ;** UNDISPLAY CURRENT LINE
- JSR CON╔N╦ILL╙UB
- ;** FETCH NEW LINE
- LDA #<256
- LDY #>256
- JSR FETCH
- ;** DISPLAY NEW LINE
- LDA #0
- STA KEYLINE╨OS
- LDA KEYLINE╠EN
- STA KEYLINE├OUNT
- JSR CON╔N╙LOSH
- LDA KEYLINE├OUNT
- STA KEYLINE╨OS
- JMP CON╔N╬EXT
-
- CON╔N╠INE╞ETCH╚EAD = *
- LDX #3
- - LDA CON╚ISTBUF╙CAN╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #<KEYLINE┬UF
- LDY #>KEYLINE┬UF
- STA ZP+0
- STY ZP+1
- LDA #6
- LDY #0
- JSR FETCH
- RTS
-
- CON╔N╙AVE╠INE = *
- LDA CON╚ISTBUF╥EPLACE╨TR+3
- CMP #ACE═EM╬ULL
- BNE +
- RTS
- + LDA KEYLINE├OUNT
- STA KEYLINE╠EN
- LDX #3
- - LDA CON╚ISTBUF╥EPLACE╨TR,X
- STA MP,X
- DEX
- BPL -
- LDA #$06
- STA MP+0
- LDA #<KEYLINE┬UF+6
- LDY #>KEYLINE┬UF+6
- STA ZP+0
- STY ZP+1
- CLC
- LDA KEYLINE├OUNT
- ADC #2
- LDY #0
- JSR STASH
- LDA #$00
- STA MP+0
- RTS
-
- CON┬ACKSPACE = *
- DEC CON├UR├OL
- BPL +
- LDX CON╫IN├OLS
- DEX
- STX CON├UR├OL
- LDA CON├UR╥OW
- BEQ +
- DEC CON├UR╥OW
- SEC
- LDA CON╠INE┴DDR+0
- SBC CON╥OW╔NC+0
- STA CON╠INE┴DDR+0
- LDA CON╠INE┴DDR+1
- SBC CON╥OW╔NC+1
- STA CON╠INE┴DDR+1
- + RTS
-
- CON├URSOR╧N = * ;( )
- JSR CON╟ET├URSOR┴DDR
- LDY CON├URSOR├OLOR
- LDA #$FF
- JSR WINCURSOR
- RTS
-
- CON├URSOR╧FF = * ;( ) ;.┴ PRESERVED
- PHA
- JSR CON╟ET├URSOR┴DDR
- LDA #0
- JSR WINCURSOR
- PLA
- RTS
-
- CON├OLOR = *
- STA SYSWORK+15
- AND #$02
- BEQ +
- STX CON├HAR├OLOR
- + LDA SYSWORK+15
- AND #$01
- BEQ +
- STY CON├URSOR├OLOR
- + LDX CON├HAR├OLOR
- LDY CON├URSOR├OLOR
- RTS
-
- CON╨ALETTE = *
- LDY #0
- BIT TEXT═ODE
- BMI +
- LDY #8
- + LDX #0
- - NOP
- .IF COMPUTER-64
- LDA CONFIG┬UF+$B0,Y
- .ELSE
- LDA CONFIG┬UF+$D0,Y
- .IFE
- STA SYSWORK+0,X
- INY
- INX
- CPX #8
- BCC -
- RTS
-
- CON╙CREEN = *
- ;** CHECK SPECIAL SIZES
- CMP #0
- BNE +
- - LDA #25
- + CMP #255
- BEQ -
- CPX #0
- BNE +
- LDX #40
- BIT TEXT═ODE
- BPL +
- LDX #80
- + CPX #255
- BNE +
- LDX #80 ;CHANGE FOR ├64 WITHOUT SOFT 80-COL SUPPORT
- ;** CHECK SCREEN LIMITS
- + CMP #26
- BCC +
- - LDA #ACE┼RR╔NVALID├ON╨ARMS
- STA ERRNO
- SEC
- RTS
- + CPX #81
- BCS -
- ;** SET SCREEN
- LDY #$00
- CPX #40+1
- BCC +
- LDY #$80
- + STY TEXT═ODE
- .IF COMPUTER-64
- ;** 128-SET FAST/SLOW
- CPY #0
- BEQ +
- LDA VIC+$11
- AND #%01101111
- STA VIC+$11
- LDA #1
- STA VIC+$30
- JMP ++
- + LDA #0
- STA VIC+$30
- LDA VIC+$11
- AND #%01111111
- ORA #%00010000
- STA VIC+$11
- + NOP
- .ELSE
- ;** 64-INITIALIZE SCREEN HARDWARE
- CPY #$00
- BNE +
- JSR VIC╔NIT
- JMP ++
- + JSR VDC╔NIT
- + NOP
- .IFE
- ;** CHANGE COLORS
- JSR CONPALETTE
- LDX SYSWORK+0
- LDY SYSWORK+1
- LDA #$23
- JSR CONCOLOR
- JSR CONPALETTE
- LDX SYSWORK+7
- LDY SYSWORK+6
- LDA #$C0
- JSR WINCOLOR
- ;** WINDOW PARMS
- JSR WINMAX
- JSR CON╫IN╔NIT
- LDA CON╫IN╥OWS
- LDX CON╫IN├OLS
- CLC
- RTS
-
- CON╨OS = *
- CMP CON╫IN╥OWS
- BCC +
- - LDA #ACE┼RR╔NVALID├ON╨ARMS
- STA ERRNO
- SEC
- RTS
- + CPX CON╫IN├OLS
- BCS -
- STA CON├UR╥OW
- STX CON├UR├OL
- LDX #0
- JSR WINPOS
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA CON╠INE┴DDR+0
- STY CON╠INE┴DDR+1
- CLC
- RTS
-
- ;3-╦EY ╥OLLOVER-128 BY ├RAIG ┬RUCE 18-╩UN-93 FROM ├= ╚ACKING MAGAZINE
-
- .IF COMPUTER-64
- SCANROWS = 11
- PK = $D02F
- NEWPOS = $CC
- KEYCODE = $D4
- PREV╦EYCODE = $D5
- XSAVE = $CD
- MASK = $CC
- CAPS╨ORT = $0001
- KEYMAP╨TR = $CC
- .ELSE
- SCANROWS = 8
- PK .BUF 1 ;DUMMY
- NEWPOS = $F5
- KEYCODE = $CB
- PREV╦EYCODE = $C5
- XSAVE = $F6
- MASK = $F5
- CAPS╨ORT .BYTE $40
- KEYMAP╨TR = $F5
- .IFE
- STOP╦EY╥OW .BUF 1
- ROLLOVER = 3
- NULL╦EY = $FF
-
- PA = $DC00
- PB = $DC01
-
- CON╔RQ╦EYSCAN = *
- LDA SCROLL├OUNTDOWN
- BEQ +
- DEC SCROLL├OUNTDOWN
- + LDA #0
- STA PA
- STA PK
- - LDA PB
- CMP PB
- BNE -
- CMP #$FF
- BEQ NO╦EY╨RESSED
-
- JSR CHECK╩OYSTICK
- BCC NO╦EY╨RESSED
- JSR KEYSCAN
- JSR CHECK╩OYSTICK
- BCC NO╦EY╨RESSED
- LDA SCAN╘ABLE+7
- STA STOP╦EY╥OW
- JSR SELECT═OUSE
- JSR SHIFTDECODE
- JSR KEYDECODE
- JSR CON╙CREEN╒NSAVE
- JSR KEYORDER
- BIT IGNORE╦EYS
- BMI +
- LDA PREV╦EYS+0
- CMP #NULL╦EY
- BEQ +
- STA KEYCODE
- JMP INTERP╦EY
-
- NO╦EY╨RESSED = *
- JSR SELECT═OUSE
- LDA #NULL╦EY
- LDX #ROLLOVER-1
- - STA PREV╦EYS,X
- DEX
- BPL -
- JSR SCAN├APS
- LDA #0
- STA IGNORE╦EYS
- STA STOP╦EY╥OW
-
- + LDA #NULL╦EY
- STA KEYCODE
- STA PREV╦EYCODE
- RTS
-
- SELECT═OUSE = *
- LDA #$FF
- STA PK
- LDA #$7F ;SELECTS PADDLE/MOUSE ┴
- STA PA
- RTS
-
- KEYSCAN╔NIT = *
- LDA #NULL╦EY
- LDX #ROLLOVER-1
- - STA PREV╦EYS,X
- DEX
- BPL -
- LDA #0
- STA IGNORE╦EYS
- RTS
-
- KEYSCAN = *
- .IF COMPUTER-64
- LDX #$FF
- LDY #$FF
- LDA #$FE
- STA MASK+0
- LDA #$FF
- STA MASK+1
- JMP +
- NEXT╥OW = *
- - LDA PB
- CMP PB
- BNE -
- STY PA
- STY PK
- EOR #$FF
- STA SCAN╘ABLE,X
- SEC
- ROL MASK+0
- ROL MASK+1
- + LDA MASK+0
- STA PA
- LDA MASK+1
- STA PK
- INX
- CPX #SCANROWS
- BCC NEXT╥OW
- RTS
- .ELSE
- LDX #$FF
- LDY #$FF
- LDA #$FE
- STA MASK
- JMP +
- NEXT╥OW = *
- - LDA PB
- CMP PB
- BNE -
- STY PA
- EOR #$FF
- STA SCAN╘ABLE,X
- SEC
- ROL MASK
- + LDA MASK
- STA PA
- INX
- CPX #SCANROWS
- BCC NEXT╥OW
- RTS
- .IFE
-
- SHIFT╥OWS .BYTE $01,$06,$07,$07,$0A
- SHIFT┬ITS .BYTE $80,$10,$20,$04,$01
- SHIFT═ASK .BYTE $01,$01,$02,$04,$08
-
- SHIFTDECODE = *
- JSR SCAN├APS
- .IF COMPUTER-64
- LDY #4
- .ELSE
- LDY #3
- .IFE
- - LDX SHIFT╥OWS,Y
- LDA SCAN╘ABLE,X
- AND SHIFT┬ITS,Y
- BEQ +
- LDA SHIFT═ASK,Y
- ORA SHIFT╓ALUE
- STA SHIFT╓ALUE
- LDA SHIFT┬ITS,Y
- EOR #$FF
- AND SCAN╘ABLE,X
- STA SCAN╘ABLE,X
- + DEY
- BPL -
- RTS
-
- SCAN├APS = *
- - LDA CAPS╨ORT
- CMP CAPS╨ORT
- BNE -
- EOR #$FF
- AND #$40
- LSR
- LSR
- STA SHIFT╓ALUE
- RTS
-
- KEYDECODE = *
- LDX #ROLLOVER-1
- LDA #$FF
- - STA NEW╦EYS,X
- DEX
- BPL -
- LDY #0
- STY NEWPOS
- LDX #0
- STX KEYCODE
-
- DECODE╬EXT╥OW = *
- LDA SCAN╘ABLE,X
- BEQ DECODE├ONTINUE
-
- LDY KEYCODE
- - LSR
- BCC ++
- PHA
- STX XSAVE
- LDX NEWPOS
- CPX #ROLLOVER
- BCS +
- TYA
- STA NEW╦EYS,X
- INC NEWPOS
- + LDX XSAVE
- PLA
- + INY
- CMP #$00
- BNE -
-
- DECODE├ONTINUE = *
- CLC
- LDA KEYCODE
- ADC #8
- STA KEYCODE
- INX
- CPX #SCANROWS
- BCC DECODE╬EXT╥OW
- RTS
-
- KEYORDER = *
- ;** REMOVE OLD KEYS NO LONGER HELD
- LDY #0
- NEXT╥EMOVE = *
- LDA PREV╦EYS,Y
- CMP #$FF
- BEQ ++
- LDX #ROLLOVER-1
- - CMP NEW╦EYS,X
- BEQ +
- DEX
- BPL -
- TYA
- TAX
- - LDA PREV╦EYS+1,X
- STA PREV╦EYS+0,X
- INX
- CPX #ROLLOVER-1
- BCC -
- LDA #$FF
- STA PREV╦EYS+ROLLOVER-1
- STA IGNORE╦EYS
- + INY
- CPY #ROLLOVER
- BCC NEXT╥EMOVE
-
- ;** INSERT NEW KEY AT FRONT
- + LDY #0
- NEXT╔NSERT = *
- LDA NEW╦EYS,Y
- CMP #$FF
- BEQ ++
- LDX #ROLLOVER-1
- - CMP PREV╦EYS,X
- BEQ +
- DEX
- BPL -
- PHA
- LDX #ROLLOVER-2
- - LDA PREV╦EYS+0,X
- STA PREV╦EYS+1,X
- DEX
- BPL -
- LDA #0
- STA IGNORE╦EYS
- PLA
- STA PREV╦EYS+0
- LDY #ROLLOVER
- + INY
- CPY #ROLLOVER
- BCC NEXT╔NSERT
- + RTS
-
- CHECK╩OYSTICK = *
- LDA #$FF
- STA PA
- STA PK
- - LDA PB
- CMP PB
- BNE -
- CMP #$FF
- RTS
-
- SCAN╘ABLE .BUF SCANROWS
- NEW╦EYS .BUF ROLLOVER
- IGNORE╦EYS .BUF 1
- PREV╦EYS .BUF ROLLOVER+2
-
- SCROLL╞REEZE .BYTE $00
- DELAY├OUNTDOWN .BYTE $00
- REPEAT├OUNTDOWN .BYTE $00
- SCROLL├OUNTDOWN .BYTE $00
-
- INTERP╦EY = * ;( KEYCODE )
- LDA KEYCODE
- ;** NOSCROLL
- .IF COMPUTER-64
- CMP #87 ;NOSCROLL
- BNE INTERP├APS
- .ELSE
- CMP #63 ;RUN/STOP
- BNE INTERP├APS
- LDA SHIFT╓ALUE
- AND #%1111
- CMP #4 ;CONTROL
- BNE INTERP├APS
- LDA KEYCODE
- .IFE
- CMP PREV╦EYCODE
- BEQ +
- STA PREV╦EYCODE
- LDA SCROLL╞REEZE
- EOR #$FF
- STA SCROLL╞REEZE
- + RTS
-
- INTERP├APS = *
- .IF COMPUTER-64
- .ELSE
- LDA KEYCODE
- CMP #63 ;RUN/STOP
- BNE INTERP╙HIFTS
- LDA SHIFT╓ALUE
- AND #%1111
- CMP #2 ;COMMODORE
- BNE INTERP╙HIFTS
- LDA KEYCODE
- CMP PREV╦EYCODE
- BEQ +
- STA PREV╦EYCODE
- LDA CAPS╨ORT
- EOR #$40
- STA CAPS╨ORT
- + RTS
- .IFE
-
- INTERP╙HIFTS = *
- LDA SHIFT╓ALUE
- AND #%00011111
- CMP #%00010000
- BNE +
- LDA #5
- JMP HANDLE╦EY ;CAPS
- + AND #%1111
- TAX
- LDA SHIFT╨RI╓EC,X
- JMP HANDLE╦EY
-
- SHIFT╨RI╓EC = *
- .IF COMPUTER-64
- ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- .BYTE $00,$01,$02,$02,$03,$03,$03,$03,$04,$04,$04,$04,$04,$04,$04,$04
- .ELSE
- .BYTE $00,$01,$02,$02,$03,$03,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04
- .IFE
-
- HANDLE╦EY = * ;( KEYCODE, .┴=SHIFT╘ABLE╬UM )
- ASL
- TAX
- LDA KEYCODE
- CMP PREV╦EYCODE
- BEQ HANDLE╥EPEAT
- JMP HANDLE╧RIG╦EY
-
- HANDLE╥EPEAT = *
- STX XSAVE
- LDA DELAY├OUNTDOWN
- BEQ +
- DEC DELAY├OUNTDOWN
- BEQ ++
- RTS
- + DEC REPEAT├OUNTDOWN
- BEQ +
- - RTS
- + LDA CONFIG┬UF+$C9
- STA REPEAT├OUNTDOWN
- LDA KEYBUF├OUNT
- BNE -
- LDX XSAVE
- JMP +
-
- HANDLE╧RIG╦EY = * ;( .╪=SHIFT╘AB╧FF )
- LDA CONFIG┬UF+$C8
- STA DELAY├OUNTDOWN
- LDA #0
- STA SCROLL╞REEZE
- + LDA CON╦EYMAP╔NDIRECT+0,X
- STA KEYMAP╨TR+0
- LDA CON╦EYMAP╔NDIRECT+1,X
- STA KEYMAP╨TR+1
- LDY KEYCODE
- STY PREV╦EYCODE
- LDA (KEYMAP╨TR),Y
- BNE STORE╦EY
- RTS
-
- KEYBUF╚EAD .BYTE 0
- KEYBUF╘AIL .BYTE 0
- KEYBUF├OUNT .BYTE 0
- KEYBUF╙IZE = 32 ;POWER OF 2
- KEYBUF─ATA .BUF KEYBUF╙IZE
-
- STORE╦EY = * ;( .┴=CHAR )
- LDX KEYBUF├OUNT
- CPX #KEYBUF╙IZE
- BCC +
- ;XX RING BELL
- RTS
- + LDX KEYBUF╘AIL
- STA KEYBUF─ATA,X
- INC KEYBUF╘AIL
- LDA KEYBUF╘AIL
- AND #KEYBUF╙IZE-1
- STA KEYBUF╘AIL
- INC KEYBUF├OUNT
- RTS
-
- ;*** GETKEY( ) : .┴=KEY├HAR
-
- CON╟ETKEY = *
- - CLI
- LDA KEYBUF├OUNT
- BEQ -
- SEI
- LDX KEYBUF╚EAD
- DEC KEYBUF├OUNT
- INC KEYBUF╚EAD
- LDA KEYBUF╚EAD
- AND #KEYBUF╙IZE-1
- STA KEYBUF╚EAD
- LDA KEYBUF─ATA,X
- CLI
- RTS
-
- ;*** STOPKEY( ) : .├├=NOT╨RESSED
-
- ACE╙TOP╦EY = *
- LDA STOP╦EY╥OW
- CMP #$80
- BEQ +
- - CLC
- RTS
- + LDA SHIFT╓ALUE
- AND #$0F
- BNE -
- LDA #0
- STA KEYBUF├OUNT
- STA KEYBUF╚EAD
- STA KEYBUF╘AIL
- STA SCROLL╞REEZE
- LDA #ACE┼RR╙TOPPED
- STA ERRNO
- SEC
- RTS
-
- CON╦EYMAP╔NDIRECT = *
- .WORD CON╦EYMAP╬ORMAL,CON╦EYMAP╙HIFT,CON╦EYMAP├OMMODORE,CON╦EYMAP├ONTROL
- .WORD CON╦EYMAP┴LTERNATE,CON╦EYMAP├APS
-
- CON╦EYMAP╬ORMAL = *
- .BYTE $14,$0D,$1D,$88,$85,$86,$87,$11,$0033,$57,$41,$34,$5A,$53,$45,$01
- .BYTE $35,$52,$44,$36,$43,$46,$54,$58,$0037,$59,$47,$38,$42,$48,$55,$56
- .BYTE $39,$49,$4A,$30,$4D,$4B,$4F,$4E,$002B,$50,$4C,$2D,$2E,$3A,$40,$2C
- .BYTE $5C,$2A,$3B,$13,$01,$3D,$5E,$2F,$0031,$5F,$04,$32,$20,$02,$51,$03
- .BYTE $84,$38,$35,$09,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$0D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CON╦EYMAP╙HIFT = *
- .BYTE $94,$8D,$9D,$8C,$89,$8A,$8B,$91,$0023,$D7,$C1,$24,$DA,$D3,$C5,$01
- .BYTE $25,$D2,$C4,$26,$C3,$C6,$D4,$D8,$0027,$D9,$C7,$28,$C2,$C8,$D5,$D6
- .BYTE $29,$C9,$CA,$30,$CD,$CB,$CF,$CE,$00DB,$D0,$CC,$DD,$3E,$5B,$BA,$3C
- .BYTE $DC,$C0,$5D,$93,$01,$3D,$DE,$3F,$0021,$DF,$04,$22,$20,$02,$D1,$83
- .BYTE $04,$38,$35,$02,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$8D,$36,$39,$33
- .BYTE $08,$30,$2E,$16,$17,$06,$0B,$00
-
- CON╦EYMAP├OMMODORE = *
- .BYTE $08,$0D,$9D,$8F,$80,$82,$84,$91,$0096,$B7,$A1,$97,$BA,$B3,$A5,$01
- .BYTE $98,$B2,$A4,$99,$A3,$A6,$B4,$B8,$009A,$B9,$A7,$9B,$A2,$A8,$B5,$B6
- .BYTE $29,$A9,$AA,$30,$AD,$AB,$AF,$AE,$00A6,$B0,$AC,$7C,$3E,$BB,$A0,$3C
- .BYTE $BC,$7F,$BD,$93,$01,$BF,$BE,$3F,$0081,$BF,$04,$95,$5F,$02,$B1,$03
- .BYTE $04,$38,$35,$18,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$8D,$36,$39,$33
- .BYTE $08,$30,$2E,$0C,$0F,$10,$15,$00
-
- CON╦EYMAP├ONTROL = *
- .BYTE $08,$00,$00,$8F,$80,$82,$84,$00,$001C,$F7,$E1,$9F,$FA,$F3,$E5,$00
- .BYTE $9C,$F2,$E4,$1E,$E3,$E6,$F4,$F8,$001F,$F9,$E7,$9E,$E2,$E8,$F5,$F6
- .BYTE $12,$E9,$EA,$92,$ED,$EB,$EF,$EE,$007B,$F0,$EC,$7D,$00,$FB,$E0,$00
- .BYTE $FC,$60,$FD,$00,$00,$FF,$FE,$00,$0090,$FF,$00,$05,$20,$00,$F1,$00
- .BYTE $04,$8C,$87,$18,$89,$8A,$88,$85,$001B,$84,$8F,$0A,$00,$8B,$80,$86
- .BYTE $08,$82,$2E,$16,$17,$19,$1A,$00
-
- CON╦EYMAP┴LTERNATE = *
- .BYTE $08,$0D,$1D,$88,$85,$86,$87,$11,$0033,$77,$61,$34,$7A,$73,$65,$00
- .BYTE $35,$72,$64,$36,$63,$66,$74,$78,$0037,$79,$67,$78,$62,$68,$75,$76
- .BYTE $39,$69,$6A,$30,$6D,$6B,$6F,$6E,$007B,$70,$6C,$7D,$2E,$7B,$BA,$2C
- .BYTE $A9,$60,$7D,$13,$00,$7F,$7E,$2F,$0031,$7F,$04,$32,$20,$02,$71,$03
- .BYTE $04,$38,$35,$09,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$0D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CON╦EYMAP├APS = *
- .BYTE $14,$0D,$1D,$88,$85,$86,$87,$11,$0033,$D7,$C1,$34,$DA,$D3,$C5,$01
- .BYTE $35,$D2,$C4,$36,$C3,$C6,$D4,$D8,$0037,$D9,$C7,$38,$C2,$C8,$D5,$D6
- .BYTE $39,$C9,$CA,$30,$CD,$CB,$CF,$CE,$002B,$D0,$CC,$2D,$2E,$3A,$40,$2C
- .BYTE $5C,$2A,$3B,$13,$01,$3D,$5E,$2F,$0031,$5F,$04,$32,$20,$02,$D1,$03
- .BYTE $04,$38,$35,$09,$32,$34,$37,$31,$001B,$2B,$2D,$0A,$0D,$36,$39,$33
- .BYTE $08,$30,$2E,$91,$11,$9D,$1D,$00
-
- CON╙S├OUNTDOWN .BYTE 1
- CON╩IFS╨ER═IN = 3600
- CON╙S═INUTE .WORD CON╩IFS╨ER═IN
- CON╙S═AX .BYTE 1
- CON╙S┴CTIVE .BYTE $00
-
- CON╙CREEN╙AVE = *
- LDA CON╙S├OUNTDOWN
- BNE +
- - RTS
- + LDA CON╙S═INUTE+0
- BNE +
- DEC CON╙S═INUTE+1
- + DEC CON╙S═INUTE+0
- LDA CON╙S═INUTE+0
- ORA CON╙S═INUTE+1
- BNE -
- LDA #<CON╩IFS╨ER═IN
- LDY #>CON╩IFS╨ER═IN
- STA CON╙S═INUTE+0
- STY CON╙S═INUTE+1
- DEC CON╙S├OUNTDOWN
- BNE -
- JSR VDC╙CREEN╙AVE
- JSR VIC╙CREEN╙AVE
- LDA #$FF
- STA CON╙S┴CTIVE
- RTS
-
- CON╙CREEN╒NSAVE = *
- LDA CON╙S═AX
- STA CON╙S├OUNTDOWN
- LDA #<CON╩IFS╨ER═IN
- LDY #>CON╩IFS╨ER═IN
- STA CON╙S═INUTE+0
- STY CON╙S═INUTE+1
- LDA CON╙S┴CTIVE
- BNE +
- RTS
- + JSR VDC╙CREEN╒NSAVE
- JSR VIC╙CREEN╒NSAVE
- LDA #$00
- STA CON╙S┴CTIVE
- RTS
-
- ;╘HIS IS TO BE DONE WHEN WE ARE IN THE WRITE ROUTINE ABOUT TO SCROLL THE SCREEN
- ;BECAUSE WE HAVE HIT THE BOTTOM LINE OF THE DISPLAY. ╔T IS ALSO TO BE DONE IN
- ;THE CONTEXT OF THE DATA REMAINING TO BE PRINTED AT THE TIME.
-
- CON╠INES╘O╙CROLL .BUF 1
- CON┬YTES╘O╙CROLL .BUF 2
- CON╙CAN╨TR = SYSWORK+14 ;(2)
- CON├OL╬UMBER .BUF 1
- CON═AX╨RESCROLL .BUF 1
-
- CON╫RITE╬EWLINE = *
- LDA SHIFT╓ALUE
- AND #$07
- BEQ +
- - JMP CON╬EWLINE
- + LDX CON├UR╥OW
- INX
- CPX CON╫IN╥OWS
- BCC -
-
- ;FIND MAXIMUM PRESCROLL AMOUNT;
- ;IF MAXIMUM PRESCROLL AMOUNT < 2 THEN NEVER MIND;
- ;LINES_TO_SCROLL := 1;
- ;BYTES_TO_SCROLL := SCREEN_WIDTH;
- ;SCAN_POINTER := DISPLAY_DATA_PTR;
- ;COL_NUMBER := 0;
-
- .IF COMPUTER-64
- LDA CONFIG┬UF+$AC
- BIT TEXT═ODE ;%%%
- BMI CON╨RESCROLL┬EGIN
- LDA CONFIG┬UF+$AD
- .ELSE
- LDA CONFIG┬UF+$40
- BIT TEXT═ODE
- BPL CON╨RESCROLL┬EGIN
- LDA CONFIG┬UF+$AE
- LDX VDC╙CROLL╥EU╫ORK+3
- CPX #ACE═EM╬ULL
- BEQ CON╨RESCROLL┬EGIN
- LDA CONFIG┬UF+$AB
- .IFE
- CON╨RESCROLL┬EGIN = *
- STA CON═AX╨RESCROLL
- CMP #2
- BCS +
- JMP CON╬EWLINE
- + LDA #1
- STA CON╠INES╘O╙CROLL
- LDA #0 ;CON╥OW╔NC+0
- LDY #0 ;CON╥OW╔NC+1
- STA CON┬YTES╘O╙CROLL+0
- STY CON┬YTES╘O╙CROLL+1
- LDA #0
- STA CON├OL╬UMBER
- INC CON├UR╥OW
-
- ;REPEAT:
- ;IF CHAR == NEWLINE GOTO LINESCROLLED;
- ;IF COL_NUMBER > LINE_WIDTH ╟╧╙╒┬ LINESCROLLED;
- ;IF CHAR == NORMAL THEN COL_NUMBER += 1; GOTO NEXTCHAR;
- ;IF CHAR == CLEAR GOTO EXIT;