home *** CD-ROM | disk | FTP | other *** search
- ;┴├┼-128/64 KERNEL ╓─├ 80-COLUMN SCREEN DRIVER CODE
-
- ;VDC MEMORY LAYOUT: $0000=CHAR,$1000=COLOR,$2000=CHARSET,$3000=ALTCHARSET
-
- VDC├OLOR┴DDR = $1000
- VDC├HARSET┴DDR = $2000
- VDC╙ELECT = $D600
- VDC╙TATUS = $D600
- VDC─ATA = $D601
- VDC╥OW╔NC = 80
-
- 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╥EG╬UM .BUF 1
-
- VDC╔NIT = *
- ;** CHARSET
- JSR VDC╞ILL═ODE
- JSR VDC╠OAD├HARSET
- ;** INIT SCREEN COLORS
- NOP
- ;** MOVE ATTRIBUTES
- LDA #<VDC├OLOR┴DDR
- LDY #>VDC├OLOR┴DDR
- LDX #$14
- JSR VDC╫RITE16
- ;** CURSOR HEIGHT
- LDA #8
- LDX #$0B
- JSR VDC╫RITE
- ;** WINDOW PARAMETERS
- JSR VDC╫INMAX
- RTS
-
- VDC╙HUTDOWN = *
- ;** RESTORE CHARSET
- LDA #<$D000
- LDY #>$D000
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #<$2000
- LDY #>$2000
- STA SYSWORK+2
- STY SYSWORK+3
- SEI
- LDA #BK├HARSET
- STA BK╙ELECT
- LDX #8
- LDY #0
- - LDA (SYSWORK+0),Y
- STA (SYSWORK+2),Y
- INY
- BNE -
- INC SYSWORK+1
- INC SYSWORK+3
- DEX
- BNE -
- LDA #BK┴├┼
- STA BK╙ELECT
- CLI
- JSR VDC╠OAD├HARSET
- ;** RESTORE ATTRIBUTES
- LDA #<$800
- LDY #>$800
- LDX #$14
- JSR VDC╫RITE16
- ;** RESTORE CURSOR HEIGHT
- LDA #7
- LDX #$0B
- JSR VDC╫RITE
- RTS
-
- CHS╙OURCE = SYSWORK+0
- CHS├OUNT = SYSWORK+2
-
- VDC╠OAD├HARSET = *
- LDA #<VDC├HARSET┴DDR
- LDY #>VDC├HARSET┴DDR
- JSR VDC┴DDR╫RITE16
- LDA #<$2000
- LDY #>$2000
- STA CHS╙OURCE+0
- STY CHS╙OURCE+1
- LDX #0
- STX CHS├OUNT
-
- CHAR╠OOP = *
- LDA #$1F
- STA VDC╥EG╬UM
- STA VDC╙ELECT
- LDY #0
- - LDA (CHS╙OURCE),Y
- - BIT VDC╙TATUS
- BPL -
- STA VDC─ATA
- INY
- CPY #8
- BCC --
- LDA #$00
- JSR VDC╥AM╫RITE
- LDX #$1E
- LDA #7
- JSR VDC╫RITE
- CLC
- LDA CHS╙OURCE+0
- ADC #8
- STA CHS╙OURCE+0
- BCC +
- INC CHS╙OURCE+1
- + INC CHS├OUNT
- BNE CHAR╠OOP
- RTS
-
- VDC╞ILL═ODE = * ;( )
- LDX #$18
- JSR VDC╥EAD
- AND #$7F
- JSR VDC╫RITE
- RTS
-
- VDC├OPY═ODE = * ;( )
- LDX #$18
- JSR VDC╥EAD
- ORA #$80
- JSR VDC╫RITE
- RTS
-
- VDC╥AM╫RITE = * ;( .┴=VALUE )
- LDX #$1F
-
- VDC╫RITE = * ;( .╪=REGISTER, .┴=VALUE )
- STX VDC╥EG╬UM
- STX VDC╙ELECT
- - BIT VDC╙TATUS
- BPL -
- STA VDC─ATA
- RTS
-
- VDC┴DDR╫RITE16 = * ;( .┴┘=VALUE )
- LDX #$12
-
- VDC╫RITE16 = * ;( .╪=HI╥EGISTER, .┴┘=VALUE )
- STX VDC╥EG╬UM
- STX VDC╙ELECT
- - BIT VDC╙TATUS
- BPL -
- STY VDC─ATA
- INX
- STX VDC╥EG╬UM
- STX VDC╙ELECT
- - BIT VDC╙TATUS
- BPL -
- STA VDC─ATA
- RTS
-
- VDC╥AM╥EAD = * ;( ) : .┴=VALUE
- LDX #$1F
-
- VDC╥EAD = * ;( .╪=REGISTER ) : .┴=VALUE
- STX VDC╥EG╬UM
- STX VDC╙ELECT
- - BIT VDC╙TATUS
- BPL -
- LDA VDC─ATA
- RTS
-
- VDC╫INMAX = *
- LDA #0
- STA VDC╫IN╙CR╪
- STA VDC╫IN╙CR┘
- STA VDC╫IN╙TART+0
- STA VDC╫IN╙TART+1
- LDA VDC╙CR╥OWS
- LDX VDC╙CR├OLS
- STA VDC╫IN╥OWS
- STX VDC╫IN├OLS
- LDA #<2000+2000+16
- LDY #>2000+2000+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 = *
- STX VDC╞ILL┬YTE
- STY VDC├LS├OLOR
- STA SYSWORK+2
- BIT SYSWORK+2
- BPL +
- JSR VDC╫INCLS╙ETUP
- JSR VDC╥OW╞ILL
- + BIT SYSWORK+2
- BVC +
- JSR VDC╫INCLS╙ETUP
- LDA VDC├LS├OLOR
- STA VDC╞ILL┬YTE
- JSR VDC┴DD├OLOR
- JSR VDC╥OW╞ILL
- + 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├OLOR = *
- CLC
- LDA SYSWORK+1
- 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╔NC
- STA SYSWORK+0
- BCC +
- INC SYSWORK+1
- + DEC VDC╞ILL╥OWS
- BNE -
- RTS
-
- VDC├OL╞ILL = * ;( (SW+0)=ADDR, VDC╞ILL┬YTE, VDC╞ILL├OLS )
- LDA SYSWORK+0
- LDY SYSWORK+1
- JSR VDC┴DDR╫RITE16
- VDC├OL╞ILL╟OT┴DDR = *
- LDA VDC╞ILL├OLS
- BEQ +
- LDA VDC╞ILL┬YTE
- JSR VDC╥AM╫RITE
- LDX VDC╞ILL├OLS
- DEX
- BEQ +
- TXA
- LDX #$1E
- JSR VDC╫RITE
- + RTS
-
- VDC╫INSET╥OWS .BUF 1
- VDC╫INSET├OLS .BUF 1
-
- VDC╫INSET = * ;%%%
- STA VDC╫INSET╥OWS
- CMP #0
- BEQ VDC╫INSET┼RR
- STX VDC╫INSET├OLS
- CPX #0
- BEQ VDC╫INSET┼RR
- CLC
- ADC SYSWORK+0
- CMP VDC╙CR╥OWS
- BEQ +
- BCC +
-
- VDC╫INSET┼RR = *
- LDA #ACE┼RR╔NVALID╫INDOW╨ARMS
- STA ERRNO
- SEC
- RTS
-
- + CLC
- LDA VDC╫INSET├OLS
- ADC SYSWORK+1
- CMP VDC╙CR├OLS
- BEQ +
- BCS VDC╫INSET┼RR
- + LDA SYSWORK+0
- LDX SYSWORK+1
- STA VDC╫IN╙CR╪
- STX VDC╫IN╙CR┘
- JSR VDC═ULT80
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDC╫IN╙TART+0
- STY VDC╫IN╙TART+1
- LDA VDC╫INSET╥OWS
- LDX VDC╫INSET├OLS
- STA VDC╫IN╥OWS
- STX VDC╫IN├OLS
- ;XX VDC╫IN╙AVE╙Z
- JSR CON╫IN├HANGE├ALLBACK
- LDA VDC╫IN╙CR╪
- LDX VDC╫IN╙CR┘
- STA SYSWORK+0
- STX SYSWORK+1
- 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╫INPUT = *
- STA VDC╨UT╫HICH
- STY VDC╞ILL┬YTE
- STX VDC╨UT╠EN
- BIT VDC╨UT╫HICH
- BPL VDC╫INPUT├OLOR
- LDA SYSWORK+0
- LDY SYSWORK+1
- JSR VDC┴DDR╫RITE16
- LDY #0
- CPY VDC╨UT╠EN
- BEQ +
- LDA #$1F
- STA VDC╥EG╬UM
- STA VDC╙ELECT
- - LDA (SYSWORK+2),Y
- - BIT VDC╙TATUS
- BPL -
- STA VDC─ATA
- INY
- CPY VDC╨UT╠EN
- BCC --
- + SEC
- LDA SYSWORK+5
- SBC VDC╨UT╠EN
- BEQ VDC╫INPUT├OLOR
- TAY
- LDA SYSWORK+4
- JSR VDC╥AM╫RITE
- DEY
- BEQ VDC╫INPUT├OLOR
- TYA
- LDX #$1E
- JSR VDC╫RITE
-
- VDC╫INPUT├OLOR = *
- BIT VDC╨UT╫HICH
- BVS +
- RTS
- + LDA SYSWORK+1
- CLC
- ADC #>VDC├OLOR┴DDR
- TAY
- LDA SYSWORK+0
- JSR VDC┴DDR╫RITE16
- LDA SYSWORK+5
- STA VDC╞ILL├OLS
- JSR VDC├OL╞ILL╟OT┴DDR
- RTS
-
- VDC╫INCOLOR = *
- PHP
- SEI
- BIT VDC╙S┴CTIVE
- BMI VDC╫INCOLOR╙S┴CTIVE
- CMP #128
- BCC +
- TXA
- LDX #$1A
- JSR VDC╫RITE
- + AND #64
- BEQ +
- TYA
- NOP
- + LDX #$1A
- JSR VDC╥EAD
- AND #$0F
- TAX
- TAY
- PLP
- RTS
-
- VDC╫INCOLOR╙S┴CTIVE = *
- CMP #128
- BCC +
- STX VDC╙S├OLOR
- + LDA VDC╙S├OLOR
- AND #$0F
- TAX
- TAY
- PLP
- RTS
-
- VDC╫INPOS = *
- JSR VDC═ULT80
- 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═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╙AVE .BUF 1
- VDC├URSOR├OLOR .BUF 1
-
- VDC╫INCURSOR = *
- CMP #0
- BEQ VDC├URSOR╧FF
- STY VDC├URSOR├OLOR
- LDA SYSWORK+0
- LDY SYSWORK+1
- LDX #$0E
- JSR VDC╫RITE16
- LDX #$0A
- JSR VDC╥EAD
- AND #$1F
- ORA #$60
- JSR VDC╫RITE
- JSR VDC╙ET├OLOR┴DDR
- JSR VDC╥AM╥EAD
- STA VDC├URSOR╙AVE
- JSR VDC╙ET├OLOR┴DDR
- LDA VDC├URSOR╙AVE
- AND #$F0
- ORA VDC├URSOR├OLOR
- JSR VDC╥AM╫RITE
- RTS
-
- VDC├URSOR╧FF = *
- LDX #$0E
- JSR VDC╫RITE16
- LDX #$0A
- JSR VDC╥EAD
- AND #$1F
- ORA #$20
- JSR VDC╫RITE
- JSR VDC╙ET├OLOR┴DDR
- LDA VDC├URSOR╙AVE
- JSR VDC╥AM╫RITE
- RTS
-
- VDC╙ET├OLOR┴DDR = * ;( (SW+0)=ADDR )
- CLC
- LDA SYSWORK+1
- ADC #>VDC├OLOR┴DDR
- TAY
- LDA SYSWORK+0
- JMP VDC┴DDR╫RITE16
-
- VDC╔RQ├URSOR = *
- ;** DO NOTHING
- RTS
-
- VDC╙CROLL─EST = SYSWORK+0
- VDC╙CROLL╙OURCE = SYSWORK+2
- VDC╙CROLL╥OWS .BUF 1
- VDC╙CROLL┼XTRA .BUF 1
-
- VDC╫INSCROLL = *
- STA SYSWORK+5
- STY VDC├LS├OLOR
- STX VDC╙CROLL┼XTRA
- CPX #0
- BNE +
- - RTS
- + LDA SYSWORK+5
- AND #%1000
- BEQ -
- CPX VDC╫IN╥OWS
- BCC +
- LDX SYSWORK+4
- LDA SYSWORK+5
- LDY VDC├LS├OLOR
- JSR VDC╫INCLS
- RTS
- + BIT SYSWORK+5
- BPL +
- JSR VDC╙CROLL╒P╙ETUP
- JSR VDC╥OW╙CROLL╒P
- LDA SYSWORK+4
- JSR VDC─O╙CROLL┼XTRA
- + BIT SYSWORK+5
- BVC +
- JSR VDC╙CROLL╒P╙ETUP
- JSR VDC╙CROLL┴DD├OLOR
- JSR VDC╥OW╙CROLL╒P
- LDA VDC├LS├OLOR
- JSR VDC─O╙CROLL┼XTRA
- + RTS
-
- VDC╙CROLL╒P╙ETUP = *
- LDA VDC╙CROLL┼XTRA
- LDX #0
- JSR VDC╫INPOS
- LDA SYSWORK+0
- LDY SYSWORK+1
- STA VDC╙CROLL╙OURCE+0
- STY VDC╙CROLL╙OURCE+1
- LDA VDC╫IN╙TART+0
- LDY VDC╫IN╙TART+1
- STA VDC╙CROLL─EST+0
- STY VDC╙CROLL─EST+1
- SEC
- LDA VDC╫IN╥OWS
- SBC VDC╙CROLL┼XTRA
- STA VDC╙CROLL╥OWS
- RTS
-
- VDC╙CROLL┴DD├OLOR = *
- CLC
- LDA SYSWORK+1
- ADC #>VDC├OLOR┴DDR
- STA SYSWORK+1
- LDA SYSWORK+3
- ADC #>VDC├OLOR┴DDR
- STA SYSWORK+3
- RTS
-
- VDC─O╙CROLL┼XTRA = * ;( .┴=FILL┬YTE, (SW+0)=ADDR )
- STA VDC╞ILL┬YTE
- LDA VDC╙CROLL┼XTRA
- STA VDC╞ILL╥OWS
- LDA VDC╫IN├OLS
- STA VDC╞ILL├OLS
- JSR VDC╥OW╞ILL
- RTS
-
- VDC╥OW╙CROLL╒P = * ;( VDC╙CROLL╙OURCE++, VDC╙CROLL─EST++, VDC╙CROLL╥OWS-- )
- LDA VDC╙CROLL╥OWS
- BNE +
- RTS
- + JSR VDC├OPY═ODE
- - JSR VDC├OL╙CROLL
- CLC
- LDA VDC╙CROLL╙OURCE+0
- ADC #VDC╥OW╔NC
- STA VDC╙CROLL╙OURCE+0
- BCC +
- INC VDC╙CROLL╙OURCE+1
- + CLC
- LDA VDC╙CROLL─EST+0
- ADC #VDC╥OW╔NC
- STA VDC╙CROLL─EST+0
- BCC +
- INC VDC╙CROLL─EST+1
- + DEC VDC╙CROLL╥OWS
- BNE -
- JSR VDC╞ILL═ODE
- RTS
-
- VDC├OL╙CROLL = * ;( VDC╙CROLL╙OURCE, VDC╙CROLL─EST, VDC╫IN├OLS )
- LDA VDC╙CROLL─EST+0
- LDY VDC╙CROLL─EST+1
- JSR VDC┴DDR╫RITE16
- LDA VDC╙CROLL╙OURCE+0
- LDY VDC╙CROLL╙OURCE+1
- LDX #$20
- JSR VDC╫RITE16
- LDA VDC╫IN├OLS
- LDX #$1E
- JSR VDC╫RITE
- RTS
-
- ;*** INTERRUPT SCREEN-SAVER CODE: **POTENTIAL VDC-ACCESS CONFLICTS**
-
- VDC╙S├OLOR .BUF 1
- VDC╙S═ODE .BUF 1
- VDC╙S┴CTIVE .BYTE $00
-
- VDC╙CREEN╙AVE = *
- - BIT VDC╙TATUS
- BPL -
- LDA VDC╥EG╬UM
- PHA
- LDX #$19
- JSR VDC╥EAD
- STA VDC╙S═ODE
- LDX #$1A
- JSR VDC╥EAD
- STA VDC╙S├OLOR
- LDA #$FF
- STA VDC╙S┴CTIVE
- LDX #$19
- LDA VDC╙S═ODE
- AND #%10111111
- JSR VDC╫RITE
- LDX #$1A
- LDA #$00
- JSR VDC╫RITE
- PLA
- STA VDC╥EG╬UM
- STA VDC╙ELECT
- - BIT VDC╙TATUS
- BPL -
- RTS
-
- VDC╙CREEN╒NSAVE = *
- - BIT VDC╙TATUS
- BPL -
- LDA VDC╥EG╬UM
- PHA
- LDX #$19
- LDA VDC╙S═ODE
- JSR VDC╫RITE
- LDX #$1A
- LDA VDC╙S├OLOR
- JSR VDC╫RITE
- LDA #$00
- STA VDC╙S┴CTIVE
- PLA
- STA VDC╥EG╬UM
- STA VDC╙ELECT
- - BIT VDC╙TATUS
- BPL -
- RTS
-
- ;THE END + BLANK LINE
-
-