home *** CD-ROM | disk | FTP | other *** search
- ;┴├┼-64 KERNEL ╓╔├ BITMAPPED 80-COLUMN SCREEN DRIVER CODE
-
- ;VIC MEMORY LAYOUT: $E000=BITMAP, $DC00=COLOR, $D800=CHARSET4BIT
-
- VDC├HAR┴DDR = $E000
- VDC├OLOR┴DDR = $DC00
- CHARSET4BIT = $D800
- VDC╥OW╔NC = 80
- VDC╥OW╨HYS╔NC = 320
- VDC├OLOR╔NC = 40
-
- VDC╫IN╙CR╪ .BUF 1
- VDC╫IN╙CR┘ .BUF 1
- VDC╫IN╥OWS .BUF 1
- VDC╫IN├OLS .BUF 1
- VDC╫IN╙TART .BUF 2
- VDC╫IN╙AVE╙Z .BUF 2
- VDC╙CR╥OWS .BYTE 25
- VDC╙CR├OLS .BYTE 80
- VDC┬ACK├OLOR .BUF 1
- VDC├HAR .BUF 8
-
- VDC╙TARTUP = *
- LDA #ACE═EM╬ULL
- STA VDC╙CROLL╥EU╫ORK+3
- LDA CONFIG┬UF+$C0
- AND #$20
- BEQ +
- LDA #$FC
- STA ALLOC╨ROC╔─
- LDA #>7680
- LDX #ACE═EM╥┼╒
- LDY #ACE═EM╥┼╒
- JSR KERN╨AGE┴LLOC
- BCS +
- LDX #3
- - LDA MP,X
- STA VDC╙CROLL╥EU╫ORK,X
- DEX
- BPL -
- + RTS
-
- VDC╔NIT = *
- LDA VIC+$11
- AND #%01111111
- ORA #%00100000
- STA VIC+$11
- LDA VIC+$18
- AND #$0F
- ORA #$70
- STA VIC+$18
- LDA $DD00
- AND #%11111100
- STA $DD00
- JSR VDC╫INMAX
- LDA CONFIG┬UF+$D7
- JSR RGBI2VIC
- ASL
- ASL
- ASL
- ASL
- STA VDC┬ACK├OLOR
- RTS
-
- VDC╙HUTDOWN = *
- LDA VIC+$11
- AND #%00011111
- STA VIC+$11
- AND #$18
- STA VIC+$18
- LDA $DD00
- AND #%11111100
- ORA #%00000011
- STA $DD00
- RTS
-
- VICBIT╫ORK .BUF 1
-
- RGBI2VICBIT = * ;.┴=COLOR, .┘=MOD╨ATTERN
- PHA
- AND #$0F
- TAX
- LDA RGBI2VIC╘AB,X
- ASL
- ASL
- ASL
- ASL
- STA VICBIT╫ORK
- TYA
- AND #$20
- BEQ +
- PLA
- LSR
- LSR
- LSR
- LSR
- TAX
- LDA RGBI2VIC╘AB,X
- JMP ++
- + PLA
- LDA VDC┬ACK├OLOR
- + ORA VICBIT╫ORK
- RTS
-
- VICBIT2RGBI = *
- BRK
-
- VDC╫INMAX = *
- LDA #0
- STA VDC╫IN╙TART+0
- STA VDC╫IN╙TART+1
- STA VDC╫IN╙CR╪
- STA VDC╫IN╙CR┘
- LDA VDC╙CR╥OWS
- LDX VDC╙CR├OLS
- STA VDC╫IN╥OWS
- STX VDC╫IN├OLS
- LDA #<8000+1000+16
- LDY #>8000+1000+16
- STA VDC╫IN╙AVE╙Z+0
- STY VDC╫IN╙AVE╙Z+1
- JSR CON╫IN├HANGE├ALLBACK
- CLC
- RTS
-
- VDC├LS├OLOR .BUF 1
-
- VDC╫INCLS = *
- LDX #$00 ;FORCED FILL PATTERN, FOR NOW
- STX VDC╞ILL┬YTE
- STA SYSWORK+2
- TYA
- LDY SYSWORK+2
- JSR RGBI2VICBIT
- STA VDC├LS├OLOR
- BIT SYSWORK+2
- BPL +
- JSR VDC╫INCLS╙ETUP
- JSR VDC┴DD├HAR
- JSR VDC╥OW╞ILL
- + BIT SYSWORK+2
- BVC +
- LDA VDC├LS├OLOR
- STA VDC╞ILL┬YTE
- JSR VDC╫INCLS╙ETUP
- JSR VDC┴DD├OLOR
- LDA #BK╥AM0
- STA BK╙ELECT
- JSR VDC╥OW╞ILL├OLOR
- LDA #BK┴├┼
- STA BK╙ELECT
- + RTS
-
- VDC╫INCLS╙ETUP = *
- LDA VDC╫IN╙TART+0
- LDY VDC╫IN╙TART+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA VDC╫IN╥OWS
- STA VDC╞ILL╥OWS
- RTS
-
- VDC┴DD├HAR = *
- LDA SYSWORK+1
- ASL SYSWORK+0
- ROL
- ASL SYSWORK+0
- ROL
- CLC
- ADC #>VDC├HAR┴DDR
- STA SYSWORK+1
- RTS
-
- VDC┴DD├OLOR = *
- LDA SYSWORK+1
- LSR
- ROR SYSWORK+0
- CLC
- ADC #>VDC├OLOR┴DDR
- STA SYSWORK+1
- RTS
-
- VDC╞ILL┬YTE .BUF 1
- VDC╞ILL╥OWS .BUF 1
- VDC╞ILL├OLS .BUF 1
-
- VDC╥OW╞ILL = * ;( (SW+0)=ADDR++, VDC╞ILL┬YTE, VDC╞ILL╥OWS-- )
- LDA VDC╫IN├OLS
- STA VDC╞ILL├OLS
- LDA VDC╞ILL╥OWS
- BNE +
- RTS
- / JSR VDC├OL╞ILL
- CLC
- LDA SYSWORK+0
- ADC #<VDC╥OW╨HYS╔NC
- STA SYSWORK+0
- LDA SYSWORK+1
- ADC #>VDC╥OW╨HYS╔NC
- STA SYSWORK+1
- DEC VDC╞ILL╥OWS
- BNE -
- RTS
-
- VDC╥OW╞ILL├OLOR = * ;( (SW+0)=ADDR++, VDC╞ILL┬YTE, VDC╞ILL╥OWS-- )
- LDA VDC╫IN├OLS
- STA VDC╞ILL├OLS
- LDA VDC╞ILL╥OWS
- BNE +
- RTS
- / JSR VDC├OL╞ILL
- CLC
- LDA SYSWORK+0
- ADC #<VDC├OLOR╔NC
- STA SYSWORK+0
- LDA SYSWORK+1
- ADC #>VDC├OLOR╔NC
- STA SYSWORK+1
- DEC VDC╞ILL╥OWS
- BNE -
- RTS
-
- VDC├OL╞ILL = * ;( (SW+0)=ADDR, VDC╞ILL┬YTE, VDC╞ILL├OLS )
- VDC├OL╞ILL╟OT┴DDR = *
- LDY VDC╞ILL├OLS
- BEQ ++
- LDA SYSWORK+1
- CMP #>VDC├HAR┴DDR
- BCS VDC├OL╞ILL┬ITMAP
- LDA VDC╞ILL├OLS
- CLC
- ADC #1 ;ROUND UP
- LSR
- TAY
- BEQ ++
-
- VDC├OLF256 = *
- LDA VDC╞ILL┬YTE
- DEY
- BEQ +
- - STA (SYSWORK+0),Y
- DEY
- BNE -
- + STA (SYSWORK+0),Y
- + RTS
-
- VDC├OL╞ILL┬ITMAP = *
- LDA VDC╞ILL├OLS
- AND #%11111110
- ASL
- ASL
- TAY
- BCC VDC├OLF256
- INC SYSWORK+1
- JSR VDC├OLF256
- DEC SYSWORK+1
- LDY #0
- JMP VDC├OLF256
-
- VDC╫INSET╥OWS .BUF 1
- VDC╫INSET├OLS .BUF 1
-
- VDC╫INSET = *
- CLC
- RTS
-
- VDC╫INSIZE = *
- LDA VDC╫IN╙TART+0
- LDY VDC╫IN╙TART+1
- STA SYSWORK+2
- STY SYSWORK+3
- LDA #<VDC╥OW╔NC
- LDY #>VDC╥OW╔NC
- STA SYSWORK+4
- STY SYSWORK+5
- LDA VDC╫IN╙CR┘
- LDX VDC╫IN╙CR╪
- STA SYSWORK+0
- STX SYSWORK+1
- LDA VDC╫IN╥OWS
- LDX VDC╫IN├OLS
- CLC
- RTS
-
- VDC╨UT╫HICH .BUF 1
- VDC╨UT├OLOR .BUF 1
- VDC╨UT╠EN .BUF 1
- VDC┴DDR .BUF 2
- VDC╨OS .BUF 1
-
- VDC╫INPUT = *
- STA VDC╨UT╫HICH
- STX VDC╨UT╠EN
- TYA
- LDY VDC╨UT╫HICH
- JSR RGBI2VICBIT
- STA VDC╞ILL┬YTE
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDC┴DDR+0
- STY VDC┴DDR+1
- JSR VDC┴DD├HAR
- LDA #BK╥AM0
- STA BK╙ELECT
- BIT VDC╨UT╫HICH
- BMI +
- JMP VDC╫INPUT├OLOR
- + LDY #0
- STY VDC╨OS
-
- VDC╫INPUT╬EXT = *
- LDY VDC╨OS
- CPY VDC╨UT╠EN
- BCS +
- LDA (SYSWORK+2),Y
- JMP +++
- + CPY SYSWORK+5
- BCC +
- JMP VDC╫INPUT├OLOR
- + LDA SYSWORK+4
-
- ;** LOCATE CHARACTER
- + LDY #0
- STY SYSWORK+7
- ASL
- ROL SYSWORK+7
- ASL
- ROL SYSWORK+7
- CLC
- ADC #<CHARSET4BIT
- STA SYSWORK+6
- LDA SYSWORK+7
- ADC #>CHARSET4BIT
- STA SYSWORK+7
-
- VDC╫INPUT╠HS = *
- LDA SYSWORK+0
- AND #$07
- BNE VDC╫INPUT╥HS
- LDY #0
- LDX #0
- - LDA (SYSWORK+6),Y
- AND #$F0
- STA VDC├HAR,X
- INX
- LDA (SYSWORK+6),Y
- ASL
- ASL
- ASL
- ASL
- STA VDC├HAR,X
- INX
- INY
- CPY #4
- BCC -
- LDY #7
- - LDA (SYSWORK+0),Y
- AND #$0F
- ORA VDC├HAR,Y
- STA (SYSWORK+0),Y
- DEY
- BPL -
- JMP VDC╫INPUT├ONT
-
- VDC╫INPUT╥HS = *
- LDA SYSWORK+0
- AND #%11111000
- STA SYSWORK+0
- LDY #0
- LDX #0
- - LDA (SYSWORK+6),Y
- LSR
- LSR
- LSR
- LSR
- STA VDC├HAR,X
- INX
- LDA (SYSWORK+6),Y
- AND #$0F
- STA VDC├HAR,X
- INX
- INY
- CPY #4
- BCC -
- LDY #7
- - LDA (SYSWORK+0),Y
- AND #$F0
- ORA VDC├HAR,Y
- STA (SYSWORK+0),Y
- DEY
- BPL -
- LDA SYSWORK+0
- ORA #%00000100
- STA SYSWORK+0
-
- VDC╫INPUT├ONT = *
- INC VDC╨OS
- CLC
- LDA SYSWORK+0
- ADC #4
- STA SYSWORK+0
- BCC +
- INC SYSWORK+1
- + JMP VDC╫INPUT╬EXT
-
- VDC╫INPUT├OLOR = *
- BIT VDC╨UT╫HICH
- BVC VDC╫INPUT┼XIT
- LDA VDC┴DDR+0
- LDY VDC┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- JSR VDC┴DD├OLOR
- LDA SYSWORK+5
- STA VDC╞ILL├OLS
- JSR VDC├OL╞ILL
-
- VDC╫INPUT┼XIT = *
- LDA #BK┴├┼
- STA BK╙ELECT
- LDA VDC┴DDR+0
- LDY VDC┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- ;PLP $$$
- RTS
-
- VDC╫INCOLOR = *
- PHP
- SEI
- CMP #128
- BCC +
- PHA
- TXA
- JSR RGBI2VIC
- STA VIC+$21
- ASL
- ASL
- ASL
- ASL
- STA VDC┬ACK├OLOR
- PLA
- + AND #64
- BEQ VDC╫INCOLOR┼XIT
- TYA
- JSR RGBI2VIC
- BIT VIC╙S┴CTIVE
- BMI +
- STA VIC+$20
- JMP VDC╫INCOLOR┼XIT
- + STA VIC╙S├OLOR
-
- VDC╫INCOLOR┼XIT = *
- BIT VIC╙S┴CTIVE
- BMI +
- LDA VIC+$20
- JMP ++
- + LDA VIC╙S├OLOR
- + JSR VIC2RGBI
- TAY
- LDA VIC+$21
- JSR VIC2RGBI
- TAX
- PLP
- RTS
-
- VDC╫INPOS = *
- JSR VDC═ULT80
- VDC╫INPOS┴DD = *
- CLC
- LDA SYSWORK+0
- ADC VDC╫IN╙TART+0
- STA SYSWORK+0
- LDA SYSWORK+1
- ADC VDC╫IN╙TART+1
- STA SYSWORK+1
- RTS
-
- VDC╨OS320 = *
- JSR VDC═ULT320
- JSR VDC╫INPOS┴DD
- CLC
- LDA SYSWORK+0
- ADC #<VDC├HAR┴DDR
- STA SYSWORK+0
- LDA SYSWORK+1
- ADC #>VDC├HAR┴DDR
- STA SYSWORK+1
- RTS
-
- VDC═ULT320 = * ;( .┴=ROW:0-50, .╪=COL ) : (SW+0)=(ROW*80+COL)*4
- JSR VDC═ULT80
- ASL SYSWORK+0
- ROL SYSWORK+1
- ASL SYSWORK+0
- ROL SYSWORK+1
- RTS
-
- VDC═ULT80 = * ;( .┴=ROW:0-50, .╪=COL ) : (SW+0)=ROW*80+COL, .╪:UNCH
- STA SYSWORK+0
- LDY #0
- STY SYSWORK+1
- ASL
- ASL
- ADC SYSWORK+0
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- ASL
- ROL SYSWORK+1
- STX SYSWORK+0
- CLC
- ADC SYSWORK+0
- BCC +
- INC SYSWORK+1
- + STA SYSWORK+0
- RTS
-
- VDC├URSOR╞LASH .BYTE $00 ;$00=INACTIVE, $FF=ACTIVE
- VDC├URSOR╙TATE .BUF 1 ;$00=FLASH╧FF, $FF=FLASH╧N
- VDC├URSOR├OUNTDOWN .BUF 1
- VDC├URSOR┴DDR .BUF 2
-
- VDC╫INCURSOR = *
- CMP #0
- BEQ VDC├URSOR╧FF
- ;XX IGNORE COLOR
- JSR VDC┴DD├HAR
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDC├URSOR┴DDR+0
- STY VDC├URSOR┴DDR+1
- LDA #0
- STA VDC├URSOR╙TATE
- LDA #1
- STA VDC├URSOR├OUNTDOWN
- JSR VDC╔RQ├URSOR┼NTER
- LDA #$FF
- STA VDC├URSOR╞LASH
- RTS
-
- VDC├URSOR╧FF = *
- ;XX IGNORE GIVEN ADDR
- LDA #0
- STA VDC├URSOR╞LASH
- LDA VDC├URSOR╙TATE
- BEQ +
- LDA #1
- STA VDC├URSOR├OUNTDOWN
- JSR VDC╔RQ├URSOR┼NTER
- + RTS
-
- VDC╔RQ╫ORK = $A0
- VDC├URSOR═ASK .BUF 1
-
- VDC╔RQ├URSOR = *
- BIT VDC├URSOR╞LASH
- BMI VDC╔RQ├URSOR┼NTER
- - RTS
- VDC╔RQ├URSOR┼NTER = *
- DEC VDC├URSOR├OUNTDOWN
- BNE -
- LDA #20
- STA VDC├URSOR├OUNTDOWN
- LDA VDC├URSOR┴DDR+0
- LDY VDC├URSOR┴DDR+1
- AND #%11111000
- STA VDC╔RQ╫ORK+0
- STY VDC╔RQ╫ORK+1
- LDX #$F0
- LDA VDC├URSOR┴DDR+0
- AND #%00000111
- BEQ +
- LDX #$0F
- + STX VDC├URSOR═ASK
- LDA #BK╥AM0
- STA BK╙ELECT
- LDY #7
- - LDA (VDC╔RQ╫ORK),Y
- EOR VDC├URSOR═ASK
- STA (VDC╔RQ╫ORK),Y
- DEY
- BPL -
- LDA #BK┴├┼
- STA BK╙ELECT
- LDA VDC├URSOR╙TATE
- EOR #$FF
- STA VDC├URSOR╙TATE
- RTS
-
- VDC╙CROLL╙OURCE = SYSWORK+0
- VDC╙CROLL─EST = SYSWORK+2
- VDC╙CROLL┬YTES = SYSWORK+4
- VDC╙CROLL╥OWS .BUF 1
- VDC╙CROLL┼XTRA .BUF 1
- VDC╙CROLL╥EU╫ORK .BUF 4
- VDC╙CROLL╞LAGS .BUF 1
- VDC╙CROLL╞ILL├HAR .BUF 1
-
- VDC╫INSCROLL = *
- STA VDC╙CROLL╞LAGS
- STY VDC├LS├OLOR
- STX VDC╙CROLL┼XTRA
- LDA SYSWORK+4
- STA VDC╙CROLL╞ILL├HAR
- CPX #0
- BNE +
- - RTS
- + LDA VDC╙CROLL╞LAGS
- AND #$08
- BEQ -
- CPX VDC╫IN╥OWS
- BCC +
- LDX VDC╙CROLL╞ILL├HAR
- LDA VDC╙CROLL╞LAGS
- LDY VDC├LS├OLOR
- JSR VDC╫INCLS
- RTS
- + BIT VDC╙CROLL╞LAGS
- BPL +
- ;** SCROLL CHARACTERS
- JSR VDC╞AST╙CROLL╒P
- + BIT VDC╙CROLL╞LAGS
- BVC +
- ;XX SCROLL COLORS
- + RTS
-
- VDC╞AST╙CROLL╒P = *
- ;** SET LENGTH
- SEC
- LDA VDC╫IN╥OWS
- SBC VDC╙CROLL┼XTRA
- LDX #0
- JSR VDC═ULT320
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDC╙CROLL┬YTES+0
- STY VDC╙CROLL┬YTES+1
- ;** SET DEST
- LDA #0
- LDX #0
- JSR VDC╨OS320
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDC╙CROLL─EST+0
- STY VDC╙CROLL─EST+1
- ;** SET SOURCE
- LDA VDC╙CROLL┼XTRA
- LDX #0
- JSR VDC╨OS320
- ;** SCROLL
- JSR VDC├OPY╞ORWARD
- ;** BLANK SCREEN BOTTOM
- SEC
- LDA VDC╫IN╥OWS
- SBC VDC╙CROLL┼XTRA
- LDX #0
- JSR VDC╨OS320
- LDA VDC╙CROLL┼XTRA
- STA VDC╞ILL╥OWS
- LDA #0
- STA VDC╞ILL┬YTE
- JSR VDC╥OW╞ILL
- RTS
-
- VDC├OPY╞ORWARD = * ;( VDC╙CROLL╙OURCE, VDC╙CROLL─EST, VDC╙CROLL┬YTES )
- LDA VDC╙CROLL╥EU╫ORK+3
- CMP #ACE═EM╬ULL
- BEQ +
- JMP VDC├OPY╥EU
- ;** SET UP SOFT COPY
- + LDA #BK╥AM0
- STA BK╙ELECT
- LDA VDC╙CROLL╙OURCE+0
- LDY VDC╙CROLL╙OURCE+1
- STA VDC╞S╞ROM+1
- STY VDC╞S╞ROM+2
- LDA VDC╙CROLL─EST+0
- LDY VDC╙CROLL─EST+1
- STA VDC╞S╘O+1
- STY VDC╞S╘O+2
- LDY VDC╙CROLL┬YTES+1
- LDX #0
- ;** COPY
- VDC╞S╞ROM LDA $FFFF,X
- VDC╞S╘O STA $FFFF,X
- INX
- BNE VDC╞S╞ROM
- INC VDC╞S╞ROM+2
- INC VDC╞S╘O+2
- DEY
- BNE VDC╞S╞ROM
- ;** COPY LAST PAGE
- LDX #5
- - LDA VDC╞S╞ROM,X
- STA VDC├OPY╠AST,X
- DEX
- BPL -
- LDX #0
- CPX VDC╙CROLL┬YTES+0
- BEQ +
- VDC├OPY╠AST = *
- LDA $FFFF,X
- STA $FFFF,X
- INX
- CPX VDC╙CROLL┬YTES+0
- BNE VDC├OPY╠AST
- ;** FINISH
- + LDA #BK┴├┼
- STA BK╙ELECT
- RTS
-
- VDC├OPY╥EU╙AVE .BUF 10
-
- VDC├OPY╥EU = *
- LDX #7
- - LDA ZP,X
- STA VDC├OPY╥EU╙AVE+0,X
- DEX
- BPL -
- LDA #%01110101
- STA BK╙ELECT
- LDA VDC╙CROLL╙OURCE+0
- LDY VDC╙CROLL╙OURCE+1
- STA ZP+0
- STY ZP+1
- LDX #3
- - LDA VDC╙CROLL╥EU╫ORK,X
- STA MP,X
- DEX
- BPL -
- LDA VDC╙CROLL┬YTES+0
- LDY VDC╙CROLL┬YTES+1
- JSR STASH
- LDA VDC╙CROLL─EST+0
- LDY VDC╙CROLL─EST+1
- STA ZP+0
- STY ZP+1
- LDA VDC╙CROLL┬YTES+0
- LDY VDC╙CROLL┬YTES+1
- JSR FETCH
- LDA #BK┴├┼
- STA BK╙ELECT
- LDX #7
- - LDA VDC├OPY╥EU╙AVE+0,X
- STA ZP,X
- DEX
- BPL -
- RTS
-
- ;*** INTERRUPT SCREEN-SAVER: WORK HANDLED BY ╓╔├ SCREEN DRIVER
-
- VDC╙S├OLOR .BUF 1
- VDC╙S═ODE .BUF 1
- VDC╙S┴CTIVE .BYTE $00
-
- VDC╙CREEN╙AVE = *
- RTS
-
- VDC╙CREEN╒NSAVE = *
- RTS
-
- ;THE END + BLANK LINE
-
-