mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-06-25 15:29:37 +00:00
Merge JGH's latest VDU driver updates. (Attempt #2)
This commit is contained in:
parent
aa639c8922
commit
9290dd47b8
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
168
auxmem.gfx.s
168
auxmem.gfx.s
|
@ -2,6 +2,160 @@
|
||||||
* (c) Bobbi 2021 GPLv3
|
* (c) Bobbi 2021 GPLv3
|
||||||
*
|
*
|
||||||
* Graphics operations
|
* Graphics operations
|
||||||
|
*
|
||||||
|
* 26-Sep-2021 All graphics screen code moved to here.
|
||||||
|
|
||||||
|
|
||||||
|
* Write character to HGR screen
|
||||||
|
PRCHRSOFT CMP #$A0 ; Convert to screen code
|
||||||
|
BCS :B0
|
||||||
|
CMP #$80
|
||||||
|
BCC :B0
|
||||||
|
EOR #$80
|
||||||
|
:B0 TAX
|
||||||
|
AND #$20
|
||||||
|
BNE :B1
|
||||||
|
TXA
|
||||||
|
EOR #$40
|
||||||
|
TAX
|
||||||
|
:B1 PHX
|
||||||
|
JSR HCHARADDR ; Addr in VDUADDR
|
||||||
|
PHP ; Disable IRQs while
|
||||||
|
SEI ; toggling memory
|
||||||
|
STA $C004 ; Write to main
|
||||||
|
LDA VDUADDR+0
|
||||||
|
STA HGRADDR+0
|
||||||
|
LDA VDUADDR+1
|
||||||
|
STA HGRADDR+1
|
||||||
|
STA $C005 ; Write to aux
|
||||||
|
PLP ; Restore IRQs
|
||||||
|
PLA ; Recover character
|
||||||
|
>>> XF2MAIN,DRAWCHAR ; Plot char on HGR screen
|
||||||
|
PUTCHRET >>> ENTAUX
|
||||||
|
RTS
|
||||||
|
|
||||||
|
HSCR1LINE >>> XF2MAIN,HGRSCR1L
|
||||||
|
HSCR1RET >>> ENTAUX
|
||||||
|
RTS
|
||||||
|
|
||||||
|
HSCRCLREOL LDA VDUTEXTY
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
>>> WRTMAIN
|
||||||
|
LDA HGRTAB+0,X
|
||||||
|
STA HGRADDR+0
|
||||||
|
LDA HGRTAB+1,X
|
||||||
|
STA HGRADDR+1
|
||||||
|
>>> WRTAUX
|
||||||
|
>>> XF2MAIN,HCLRLINE
|
||||||
|
|
||||||
|
HSCRCLEAR >>> XF2MAIN,CLRHGR
|
||||||
|
VDU16RET >>> ENTAUX
|
||||||
|
STZ XPIXEL+0
|
||||||
|
STZ XPIXEL+1
|
||||||
|
LDA #191
|
||||||
|
STA YPIXEL
|
||||||
|
RTS
|
||||||
|
CLRLNRET >>> ENTAUX
|
||||||
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
* X=txt colour
|
||||||
|
HSCRSETTCOL RTS
|
||||||
|
|
||||||
|
|
||||||
|
* X=gfx colour, A=gcol action
|
||||||
|
* GCOL actions:
|
||||||
|
* 0 = SET pixel
|
||||||
|
* 1 = ORA with pixel
|
||||||
|
* 2 = AND with pixel
|
||||||
|
* 3 = XOR with pixel
|
||||||
|
* 4 = NOT pixel
|
||||||
|
* 5 = NUL no change to pixel
|
||||||
|
* 6 = CLR clear pixel to background
|
||||||
|
* 7 = UND undefined
|
||||||
|
HSCRSETGCOL PHX
|
||||||
|
LDX #$00 ; Normal drawing mode
|
||||||
|
CMP #$04 ; k=4 means toggle
|
||||||
|
BNE :NORM
|
||||||
|
LDX #$01 ; Change to toggle mode
|
||||||
|
:NORM >>> WRTMAIN
|
||||||
|
TXA
|
||||||
|
STX LINETYPE
|
||||||
|
STX FDRAWADDR+5
|
||||||
|
>>> WRTAUX
|
||||||
|
>>> XF2MAIN,SETLINE
|
||||||
|
VDU18RET1 >>> ENTAUX
|
||||||
|
:NORM PLA ; Colour
|
||||||
|
BPL :FOREGND ; <128 is foreground
|
||||||
|
>>> WRTMAIN
|
||||||
|
AND #$7F
|
||||||
|
STA BGCOLOR ; Stored in main memory
|
||||||
|
>>> WRTAUX
|
||||||
|
RTS
|
||||||
|
:FOREGND >>> WRTMAIN
|
||||||
|
STA FGCOLOR ; Stored in main memory
|
||||||
|
>>> WRTAUX
|
||||||
|
RTS
|
||||||
|
|
||||||
|
* Plot actions, PLOT k,x,y
|
||||||
|
* k is in VDUQ+4
|
||||||
|
* x is in VDUQ+5,VDUQ+6
|
||||||
|
* y is in VDUQ+7,VDUQ+8
|
||||||
|
HGRPLOT JSR CVTCOORD ; Convert coordinate system
|
||||||
|
HGRPLOT2 LDA VDUQ+4
|
||||||
|
AND #$04 ; Bit 2 set -> absolute
|
||||||
|
BNE HGRPLOTABS
|
||||||
|
JSR RELCOORD ; Add coords to XPIXEL/YPIXEL
|
||||||
|
HGRPLOTABS LDA VDUQ+4
|
||||||
|
AND #$03
|
||||||
|
CMP #$0 ; Bits 0,1 clear -> just move
|
||||||
|
BNE HGRPLOTACT
|
||||||
|
HGRPLOTPOS JMP HGRPOS ; Just update pos
|
||||||
|
HGRPLOTACT LDA VDUQ+4
|
||||||
|
AND #$C0
|
||||||
|
CMP #$40 ; Bit 7 clr, bit 6 set -> point
|
||||||
|
BNE :LINE
|
||||||
|
>>> WRTMAIN
|
||||||
|
LDA VDUQ+4
|
||||||
|
STA PLOTMODE
|
||||||
|
LDA VDUQ+5
|
||||||
|
STA FDRAWADDR+6 ; LSB of X1
|
||||||
|
LDA VDUQ+6
|
||||||
|
STA FDRAWADDR+7 ; MSB of X1
|
||||||
|
LDA VDUQ+7
|
||||||
|
STA FDRAWADDR+8 ; Y1
|
||||||
|
>>> WRTAUX
|
||||||
|
>>> XF2MAIN,DRAWPNT
|
||||||
|
:LINE >>> WRTMAIN
|
||||||
|
LDA VDUQ+4
|
||||||
|
STA PLOTMODE
|
||||||
|
LDA XPIXEL+0
|
||||||
|
STA FDRAWADDR+6
|
||||||
|
LDA XPIXEL+1
|
||||||
|
STA FDRAWADDR+7
|
||||||
|
LDA YPIXEL
|
||||||
|
STA FDRAWADDR+8
|
||||||
|
LDA VDUQ+5
|
||||||
|
STA FDRAWADDR+9 ; LSB of X1
|
||||||
|
LDA VDUQ+6
|
||||||
|
STA FDRAWADDR+10 ; MSB of X1
|
||||||
|
LDA VDUQ+7
|
||||||
|
STA FDRAWADDR+11 ; Y1
|
||||||
|
>>> WRTAUX
|
||||||
|
>>> XF2MAIN,DRAWLINE
|
||||||
|
VDU25RET >>> ENTAUX
|
||||||
|
* Fall through into HGRPOS
|
||||||
|
* Save pixel X,Y position
|
||||||
|
HGRPOS LDA VDUQ+5
|
||||||
|
STA XPIXEL+0
|
||||||
|
LDA VDUQ+6
|
||||||
|
STA XPIXEL+1
|
||||||
|
LDA VDUQ+7
|
||||||
|
STA YPIXEL
|
||||||
|
RTS
|
||||||
|
XPIXEL DW $0000 ; Previous plot x-coord
|
||||||
|
YPIXEL DW $0000 ; Previous plot y-coord
|
||||||
|
|
||||||
* Convert high-resolution screen coordinates
|
* Convert high-resolution screen coordinates
|
||||||
* from 1280x1024 to 280x192
|
* from 1280x1024 to 280x192
|
||||||
|
@ -59,7 +213,7 @@ CVTCOORD
|
||||||
ROR ZP2+0
|
ROR ZP2+0
|
||||||
LSR A
|
LSR A
|
||||||
ROR ZP2+0
|
ROR ZP2+0
|
||||||
LSR A
|
:YCOORD4 LSR A
|
||||||
ROR ZP2+0
|
ROR ZP2+0
|
||||||
LSR A
|
LSR A
|
||||||
ROR ZP2+0
|
ROR ZP2+0
|
||||||
|
@ -92,15 +246,3 @@ RELCOORD CLC
|
||||||
STA VDUQ+7
|
STA VDUQ+7
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ BYTE00XX BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
||||||
RTS ; %000x1xxx host type, 'A'pple
|
RTS ; %000x1xxx host type, 'A'pple
|
||||||
BYTE00A BRK
|
BYTE00A BRK
|
||||||
DB $F7
|
DB $F7
|
||||||
HELLO ASC 'Applecorn MOS 2021-09-24'
|
HELLO ASC 'Applecorn MOS 2021-09-26'
|
||||||
DB $00 ; Unify MOS messages
|
DB $00 ; Unify MOS messages
|
||||||
|
|
||||||
|
|
||||||
|
|
549
auxmem.vdu.s
549
auxmem.vdu.s
|
@ -13,6 +13,9 @@
|
||||||
* 09-Sep-2021 New dispatch routine.
|
* 09-Sep-2021 New dispatch routine.
|
||||||
* 22-Sep-2021 More VDU workspace, started MODE definitions.
|
* 22-Sep-2021 More VDU workspace, started MODE definitions.
|
||||||
* 23-Sep-2021 More or less sorted VDU workspace.
|
* 23-Sep-2021 More or less sorted VDU workspace.
|
||||||
|
* 26-Sep-2021 Merged together JGH VDU updates and Bobbi GFX updates.
|
||||||
|
* Moved all graphics screen access code to gfx.s
|
||||||
|
* All 65816-specific code disabled.
|
||||||
|
|
||||||
|
|
||||||
**********************************
|
**********************************
|
||||||
|
@ -33,10 +36,15 @@ VDUSTATUS EQU $D0 ; $D0 # VDU status
|
||||||
* bit 1 = Don't scroll (COPY cursor or VDU 5 mode)
|
* bit 1 = Don't scroll (COPY cursor or VDU 5 mode)
|
||||||
* bit 0 = VDU 2 printer echo active
|
* bit 0 = VDU 2 printer echo active
|
||||||
*
|
*
|
||||||
VDUCHAR EQU VDUSTATUS+1 ; $D1
|
VDUCHAR EQU VDUSTATUS+1 ; $D1 current control character
|
||||||
VDUADDR EQU VDUSTATUS+4 ; $D4 address of current char cell
|
VDUTEMP EQU VDUCHAR ; &D1
|
||||||
OLDCHAR EQU OSKBD1 ; *TEMP* character under cursor
|
VDUADDR EQU VDUSTATUS+2 ; $D2 address of current char cell
|
||||||
COPYCHAR EQU OSKBD2 ; *TEMP* character under copy cursor
|
VDUBANK EQU VDUADDR+2 ; $D4 screen bank
|
||||||
|
VDUADDR2 EQU VDUADDR+3 ; $D5 address being scrolled
|
||||||
|
VDUBANK2 EQU VDUBANK+3 ; $D7 screen bank being scrolled
|
||||||
|
*
|
||||||
|
OLDCHAR EQU OSKBD1 ; &EC character under cursor
|
||||||
|
COPYCHAR EQU OSKBD2 ; &ED character under copy cursor
|
||||||
|
|
||||||
* VDU DRIVER MAIN WORKSPACE
|
* VDU DRIVER MAIN WORKSPACE
|
||||||
***************************
|
***************************
|
||||||
|
@ -71,10 +79,11 @@ PIXELPOSNX EQU VDUVARS+$20 ; current graphics X in pixels
|
||||||
PIXELPOSNY EQU VDUVARS+$22 ; current graphics Y in pixels
|
PIXELPOSNY EQU VDUVARS+$22 ; current graphics Y in pixels
|
||||||
PIXELLASTX EQU VDUVARS+$24 ; last graphics X in pixels
|
PIXELLASTX EQU VDUVARS+$24 ; last graphics X in pixels
|
||||||
PIXELLASTY EQU VDUVARS+$26 ; last graphics Y in pixels
|
PIXELLASTY EQU VDUVARS+$26 ; last graphics Y in pixels
|
||||||
|
VDUWINEND EQU VDUVARS+$27 ; VDU 26 clears up to here
|
||||||
*
|
*
|
||||||
CURSOR EQU VDUVARS+$28 ; character used for cursor
|
CURSOR EQU VDUVARS+$28 ; character used for cursor
|
||||||
CURSORED EQU VDUVARS+$29 ; character used for edit cursor
|
CURSORCP EQU VDUVARS+$29 ; character used for copy cursor
|
||||||
CURSORCP EQU VDUVARS+$2A ; character used for copy cursor
|
CURSORED EQU VDUVARS+$2A ; character used for edit cursor
|
||||||
*
|
*
|
||||||
VDUQ EQU VDUVARS+$2B ; $2B..$33
|
VDUQ EQU VDUVARS+$2B ; $2B..$33
|
||||||
VDUQLAST EQU VDUQ+1 ; Neatly becomes VDUVARS+$2C
|
VDUQLAST EQU VDUQ+1 ; Neatly becomes VDUVARS+$2C
|
||||||
|
@ -91,7 +100,7 @@ GFXPLOTFGD EQU VDUVARS+$3B ; # Foreground GCOL action
|
||||||
GFXPLOTBGD EQU VDUVARS+$3C ; # Background GCOL action
|
GFXPLOTBGD EQU VDUVARS+$3C ; # Background GCOL action
|
||||||
VDUVAR3D EQU VDUVARS+$3D
|
VDUVAR3D EQU VDUVARS+$3D
|
||||||
VDUVAR3E EQU VDUVARS+$3E
|
VDUVAR3E EQU VDUVARS+$3E
|
||||||
VDUBYTES EQU VDUVARS+$3F ; # bytes per char, 1=text only
|
VDUBYTES EQU VDUVARS+$3F ; bytes per char, 1=text only
|
||||||
VDUCOLOURS EQU VDUVARS+$40 ; # colours-1
|
VDUCOLOURS EQU VDUVARS+$40 ; # colours-1
|
||||||
VDUPIXELS EQU VDUVARS+$41 ; # pixels per byte
|
VDUPIXELS EQU VDUVARS+$41 ; # pixels per byte
|
||||||
VDUWORKSP EQU VDUVARS+$42 ; 28 bytes of general workspace
|
VDUWORKSP EQU VDUVARS+$42 ; 28 bytes of general workspace
|
||||||
|
@ -99,16 +108,20 @@ VDUWORKSZ EQU VDUVAREND-VDUWORKSP+1
|
||||||
*
|
*
|
||||||
|
|
||||||
* Screen definitions
|
* Screen definitions
|
||||||
* 0 1 2 3 4 5 6 7
|
* 1 3 6 7
|
||||||
SCNTXTMAXX DB 79,39,19,79,39,19,39,39 ; Max text column
|
SCNTXTMAXX DB 79,39,19,79,39,19,39,39 ; Max text column
|
||||||
SCNTXTMAXY DB 23,23,23,23,23,23,23,23 ; Max text row
|
SCNTXTMAXY DB 23,23,23,23,23,23,23,23 ; Max text row
|
||||||
SCNBYTES DB 1,1,8,1,1,1,1,1
|
SCNBYTES DB 1, 8, 1, 1, 1, 1, 1, 1 ; Bytes per character
|
||||||
SCNCOLOURS DB 1,1,8,1,1,1,1,1
|
SCNCOLOURS DB 15,15,15,15,15,15,15,15 ; Colours-1
|
||||||
SCNTYPE DB 1,0,128,1,0,0,0,0
|
SCNPIXELS DB 0, 7, 0, 0, 0, 0, 0, 0 ; Pixels per byte
|
||||||
|
SCNTYPE DB 1,128,0, 1, 0, 0, 0,64 ; Screen type
|
||||||
* b7=FastDraw
|
* b7=FastDraw
|
||||||
* b6=Teletext
|
* b6=Teletext
|
||||||
* b0=40COL/80COL
|
* b0=40COL/80COL
|
||||||
* =
|
|
||||||
|
* Colour table
|
||||||
|
CLRTRANS DB 00,01,04,09,02,03,07,10
|
||||||
|
DB 05,08,12,13,06,14,11,15
|
||||||
|
|
||||||
********************************************************************
|
********************************************************************
|
||||||
* Note that we use PAGE2 80 column mode ($800-$BFF in main and aux)
|
* Note that we use PAGE2 80 column mode ($800-$BFF in main and aux)
|
||||||
|
@ -180,7 +193,7 @@ CTRLCHARGO2 PHP ; Save CS=(ctrl>=8 && ctrl<=13)
|
||||||
RTS ; Return, CC=Don't echo to printer
|
RTS ; Return, CC=Don't echo to printer
|
||||||
|
|
||||||
OUTCHARGO ASL A ; Entry point to move COPY cursor
|
OUTCHARGO ASL A ; Entry point to move COPY cursor
|
||||||
TAY ; (TEMP and scroll screen)
|
TAY
|
||||||
CTRLCHARJMP CPY #6*2
|
CTRLCHARJMP CPY #6*2
|
||||||
BEQ CTRLCHAR6 ; Always allow VDU 6 through
|
BEQ CTRLCHAR6 ; Always allow VDU 6 through
|
||||||
BIT VDUSTATUS
|
BIT VDUSTATUS
|
||||||
|
@ -320,52 +333,43 @@ PRCHRC PHA ; Save character
|
||||||
:RESUME PLA
|
:RESUME PLA
|
||||||
|
|
||||||
* Put character to screen
|
* Put character to screen
|
||||||
PUTCHRC EOR #$80 ; Convert character
|
* Puts character to text screen buffer, then in graphics mode,
|
||||||
TAY
|
* writes bitmap to graphics screen
|
||||||
|
PUTCHRC PHA
|
||||||
|
EOR #$80 ; Convert character to screen code
|
||||||
|
TAX
|
||||||
AND #$A0
|
AND #$A0
|
||||||
BNE PRCHR4
|
BNE PRCHR4
|
||||||
CPY #$20
|
CPX #$20
|
||||||
BCS PRCHR3 ; Not $80-$9F
|
BCS PRCHR3 ; Not $80-$9F
|
||||||
BIT VDUSCREEN
|
BIT VDUSCREEN
|
||||||
BVC PRCHR3 ; Not teletext
|
BVC PRCHR3 ; Not teletext
|
||||||
LDY #$E0 ; Convert $80-$9F to space
|
LDX #$E0 ; Convert $80-$9F to space
|
||||||
PRCHR3 TYA
|
PRCHR3 TXA
|
||||||
EOR #$40
|
EOR #$40
|
||||||
TAY
|
TAX
|
||||||
PRCHR4 PHY
|
PRCHR4 JSR CHARADDR ; Find character address
|
||||||
JSR CHARADDR ; Find character address
|
TXA ; Get character back
|
||||||
PLA ; Get character back
|
BIT VDUBANK
|
||||||
PHA ; Stash it again
|
* BPL PRCHR5 ; Not AppleGS, use short write
|
||||||
PHP ; Disable IRQs while
|
* DB $97,VDUADDR ; STA [VDUADDR],Y
|
||||||
|
* BRA PRCHR8
|
||||||
|
PRCHR5 PHP ; Disable IRQs while
|
||||||
SEI ; toggling memory
|
SEI ; toggling memory
|
||||||
BCC PRCHR6 ; Aux memory
|
BCC PRCHR6 ; Aux memory
|
||||||
STA $C004 ; Switch to main memory
|
STA $C004 ; Switch to main memory
|
||||||
PRCHR6 STA (VDUADDR),Y ; Store it
|
PRCHR6 STA (VDUADDR),Y ; Store it
|
||||||
STA $C005 ; Back to aux memory
|
PRCHR7 STA $C005 ; Back to aux memory
|
||||||
PLP ; Restore IRQs
|
PLP ; Restore IRQs
|
||||||
LDY VDUBYTES
|
PRCHR8 PLA
|
||||||
DEY ; If VDUBYTE=1, text mode
|
BIT VDUSCREEN
|
||||||
BEQ :DONE
|
BPL GETCHROK
|
||||||
JSR HCHARADDR ; Addr in VDUADDR
|
JMP PRCHRSOFT ; Write character to graphics
|
||||||
PHP ; Disable IRQs while
|
|
||||||
SEI ; toggling memory
|
|
||||||
STA $C004 ; Write to main
|
|
||||||
LDA VDUADDR+0
|
|
||||||
STA HGRADDR+0
|
|
||||||
LDA VDUADDR+1
|
|
||||||
STA HGRADDR+1
|
|
||||||
STA $C005 ; Write to aux
|
|
||||||
PLP ; Restore IRQs
|
|
||||||
PLA ; Recover character
|
|
||||||
>>> XF2MAIN,DRAWCHAR ; Plot char on HGR screen
|
|
||||||
:DONE PLA ; Discard character
|
|
||||||
RTS
|
|
||||||
|
|
||||||
PUTCHRET >>> ENTAUX
|
|
||||||
RTS
|
|
||||||
|
|
||||||
|
* OSBYTE &87 - Read character at cursor
|
||||||
|
***************************************
|
||||||
* Fetch character from screen at (TEXTX,TEXTY) and return MODE in Y
|
* Fetch character from screen at (TEXTX,TEXTY) and return MODE in Y
|
||||||
* Always uses text screen (which we maintain even in graphics mode)
|
* Always read from text screen (which we maintain even in graphics mode)
|
||||||
BYTE87
|
BYTE87
|
||||||
GETCHRC JSR CHARADDR ; Find character address
|
GETCHRC JSR CHARADDR ; Find character address
|
||||||
PHP ; Disable IRQs while
|
PHP ; Disable IRQs while
|
||||||
|
@ -387,18 +391,21 @@ GETCHR7 TYA
|
||||||
TAX ; X=char
|
TAX ; X=char
|
||||||
GETCHROK RTS
|
GETCHROK RTS
|
||||||
|
|
||||||
* Get text cursor position
|
|
||||||
BYTE86 LDY VDUTEXTY ; ROW ; $86 = read cursor pos
|
* OSBYTE &86 - Get text cursor position
|
||||||
LDX VDUTEXTX ; COL
|
***************************************
|
||||||
|
BYTE86 LDY VDUTEXTY
|
||||||
|
LDX VDUTEXTX
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Calculate character address
|
* Calculate character address
|
||||||
|
* NB: VDUBANK at VDUADDR+2 is set by VDU22
|
||||||
CHARADDR LDA VDUTEXTY
|
CHARADDR LDA VDUTEXTY
|
||||||
ASL
|
CHARADDRY ASL
|
||||||
TAX
|
TAY
|
||||||
LDA SCNTAB+0,X ; LSB of row address
|
LDA SCNTAB+0,Y ; LSB of row address
|
||||||
STA VDUADDR+0
|
STA VDUADDR+0
|
||||||
LDA SCNTAB+1,X ; MSB of row address
|
LDA SCNTAB+1,Y ; MSB of row address
|
||||||
STA VDUADDR+1
|
STA VDUADDR+1
|
||||||
LDA VDUTEXTX
|
LDA VDUTEXTX
|
||||||
BIT $C01F
|
BIT $C01F
|
||||||
|
@ -406,26 +413,31 @@ CHARADDR LDA VDUTEXTY
|
||||||
BPL CHARADDR40 ; 40-col
|
BPL CHARADDR40 ; 40-col
|
||||||
LSR A
|
LSR A
|
||||||
CHARADDR40 TAY ; Y=offset into this row
|
CHARADDR40 TAY ; Y=offset into this row
|
||||||
|
LDA VDUBANK
|
||||||
|
AND #$FE
|
||||||
|
BCS CHARADDROK
|
||||||
|
ORA #$01
|
||||||
|
CHARADDROK STA VDUBANK
|
||||||
RTS
|
RTS
|
||||||
* (VDUADDR),Y=>character address
|
* (VDUADDR),Y=>character address
|
||||||
* CC=auxmem
|
* VDUBANK = AppleGS screen bank
|
||||||
* CS=mainmem
|
* CC=auxmem, CS=mainmem, X=preserved
|
||||||
|
|
||||||
* Calculate character address in HGR mode
|
* Calculate character address in HGR screen memory
|
||||||
* This is the address of the first pixel row of the char
|
* This is the address of the first pixel row of the char
|
||||||
* Add $0400 for each subsequent row of the char
|
* Add $0400 for each subsequent row of the char
|
||||||
HCHARADDR LDA VDUTEXTY
|
HCHARADDR LDA VDUTEXTY
|
||||||
ASL
|
ASL
|
||||||
TAX
|
TAY
|
||||||
CLC
|
CLC
|
||||||
LDA HGRTAB+0,X ; LSB of row address
|
LDA HGRTAB+0,Y ; LSB of row address
|
||||||
ADC VDUTEXTX
|
ADC VDUTEXTX
|
||||||
STA VDUADDR+0
|
STA VDUADDR+0
|
||||||
LDA HGRTAB+1,X ; MSB of row address
|
LDA HGRTAB+1,Y ; MSB of row address
|
||||||
ADC #$00
|
ADC #$00
|
||||||
STA VDUADDR+1
|
STA VDUADDR+1
|
||||||
RTS
|
RTS
|
||||||
* (VDUADDR)=>character address
|
* (VDUADDR)=>character address, X=preserved
|
||||||
|
|
||||||
* Move cursor left
|
* Move cursor left
|
||||||
VDU08 LDA VDUTEXTX ; COL
|
VDU08 LDA VDUTEXTX ; COL
|
||||||
|
@ -504,13 +516,33 @@ VDU31 LDY VDUQ+8
|
||||||
|
|
||||||
|
|
||||||
* VDU 26 - Reset to default windows
|
* VDU 26 - Reset to default windows
|
||||||
VDU26 LDX VDUMODE
|
VDU26 LDA #$F7
|
||||||
VDU26A LDA SCNTXTMAXX,X
|
JSR CLRSTATUS ; Clear 'soft window'
|
||||||
STA TXTWINRGT
|
VDU26A LDX #VDUWINEND-VDUVARS
|
||||||
LDA SCNTXTMAXY,X
|
LDA #$00
|
||||||
STA TXTWINBOT
|
VDU26LP STA VDUVARS,X ; Clear all windows
|
||||||
|
DEX ; and all coords
|
||||||
|
BPL VDU26LP ; and origin, etc.
|
||||||
|
LDY VDUMODE
|
||||||
|
LDA SCNTXTMAXY,Y
|
||||||
|
STA TXTWINBOT ; Text window height
|
||||||
|
STA GFXWINTOP ; Graphics height
|
||||||
|
LDX #GFXWINTOP-VDUVARS
|
||||||
|
LDA SCNTXTMAXX,Y
|
||||||
|
STA TXTWINRGT ; Text window width
|
||||||
|
STA GFXWINRGT ; Graphics width
|
||||||
|
LDX #GFXWINRGT-VDUVARS
|
||||||
|
* TO DO *
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
* VDU 24,left;bottom;right;top; - define graphics window
|
||||||
|
VDU24 RTS
|
||||||
|
|
||||||
|
* VDU 28,left,bottom,right,top - define text window
|
||||||
|
VDU28 RTS
|
||||||
|
|
||||||
|
* VDU 29,x;y; - define graphics origin
|
||||||
|
VDU29 RTS
|
||||||
|
|
||||||
|
|
||||||
* Initialise VDU driver
|
* Initialise VDU driver
|
||||||
|
@ -518,75 +550,62 @@ VDU26A LDA SCNTXTMAXX,X
|
||||||
* On entry, A=MODE to start in
|
* On entry, A=MODE to start in
|
||||||
*
|
*
|
||||||
VDUINIT STA VDUQ+8
|
VDUINIT STA VDUQ+8
|
||||||
|
* JSR FONTIMPLODE ; Reset VDU 23 font
|
||||||
|
|
||||||
* VDU 22 - MODE n
|
* VDU 22 - MODE n
|
||||||
*****************
|
*****************
|
||||||
* At the moment only MODEs available:
|
* At the moment only MODEs available:
|
||||||
|
* MODE 1 - 280x192 HGR graphics, 40 cols bitmap text
|
||||||
* MODE 3 - 80x24 text
|
* MODE 3 - 80x24 text
|
||||||
* MODE 6 - 40x24 text
|
* MODE 6 - 40x24 text
|
||||||
* MODE 7 - 40x24 with $80-$9F converted to spaces
|
* MODE 7 - 40x24 with $80-$9F converted to spaces
|
||||||
* MODE 2 - 280x192 HGR graphics, 40 cols bitmap text
|
|
||||||
* MODE 0 defaults to MODE 3
|
* MODE 0 defaults to MODE 3
|
||||||
* All others default to MODE 6
|
* All others default to MODE 6
|
||||||
*
|
*
|
||||||
|
* Wait for VSync?
|
||||||
VDU22 LDA VDUQ+8
|
VDU22 LDA VDUQ+8
|
||||||
AND #$07
|
AND #$07
|
||||||
STA VDUMODE
|
|
||||||
TAX ; Set up MODE
|
TAX ; Set up MODE
|
||||||
|
STX VDUMODE ; Screen MODE
|
||||||
|
LDA SCNCOLOURS,X
|
||||||
|
STA VDUCOLOURS ; Colours-1
|
||||||
|
LDA SCNBYTES,X
|
||||||
|
STA VDUBYTES ; Bytes per char
|
||||||
|
LDA SCNPIXELS,X
|
||||||
|
STA VDUPIXELS ; Pixels per byte
|
||||||
|
LDA SCNTYPE,X
|
||||||
|
STA VDUSCREEN ; Screen type
|
||||||
|
JSR NEGCALL ; Find machine type
|
||||||
|
AND #$0F
|
||||||
|
BEQ :MODEGS ; MCHID=$x0 -> Not AppleGS, bank=0
|
||||||
|
LDA #$E0 ; Not $x0 -> AppleGS, point to screen bank
|
||||||
|
:MODEGS STA VDUBANK
|
||||||
|
LDA #$01
|
||||||
|
JSR CLRSTATUS ; Clear everything except PrinterEcho
|
||||||
LDA #'_' ; Set up default cursors
|
LDA #'_' ; Set up default cursors
|
||||||
STA CURSOR ; Normal cursor
|
STA CURSOR ; Normal cursor
|
||||||
STA CURSORCP ; Copy cursor when editing
|
STA CURSORCP ; Copy cursor when editing
|
||||||
LDA #$A0
|
LDA #$A0
|
||||||
STA CURSORED ; Edit cursor when editing
|
STA CURSORED ; Edit cursor when editing
|
||||||
LDA #$01
|
JSR VDU20 ; Default colours
|
||||||
JSR CLRSTATUS ; Clear everything except PrinterEcho
|
JSR VDU26 ; Default windows
|
||||||
JSR VDU26A
|
STA $C052 ; Clear MIXED
|
||||||
*
|
LDA VDUSCREEN
|
||||||
LDA SCNBYTES,X
|
|
||||||
STA VDUBYTES
|
|
||||||
LDA SCNCOLOURS,X
|
|
||||||
STA VDUCOLOURS
|
|
||||||
LDA SCNTYPE,X
|
|
||||||
STA VDUSCREEN
|
|
||||||
BMI VDU22G ; b7=1, graphics mode
|
BMI VDU22G ; b7=1, graphics mode
|
||||||
* TEMP
|
|
||||||
CPX #2
|
|
||||||
BEQ VDU22G ; Jump out for MODE 1
|
|
||||||
* TEMP
|
|
||||||
*
|
|
||||||
AND #$01 ; 40col/80col bit
|
AND #$01 ; 40col/80col bit
|
||||||
TAX
|
TAX
|
||||||
STA $C00C,X ; Select 40col/80col
|
STA $C00C,X ; Select 40col/80col
|
||||||
STA $C051 ; Enable Text
|
STA $C051 ; Enable Text
|
||||||
STA $C055 ; PAGE2
|
STA $C055 ; PAGE2
|
||||||
STA $C052 ; Clear MIXED
|
|
||||||
STA $C00F ; Enable alt charset
|
STA $C00F ; Enable alt charset
|
||||||
BRA VDU22CLR
|
* Fall through into CLS
|
||||||
|
|
||||||
|
VDU12 STZ FXLINES
|
||||||
|
STZ VDUTEXTX
|
||||||
|
STZ VDUTEXTY
|
||||||
|
|
||||||
VDU22G STA $C050 ; Enable Graphics
|
* Clear the text screen buffer
|
||||||
STA $C057 ; Hi-Res
|
:L1 JSR CLREOL
|
||||||
STA $C054 ; PAGE1
|
|
||||||
STA $C052 ; Clear MIXED
|
|
||||||
STA $C00C ; Select 40col text
|
|
||||||
JMP VDU16 ; Clear HGR screen
|
|
||||||
|
|
||||||
VDU22CLR
|
|
||||||
* JSR VDU15 ; Turn off paged scrolling
|
|
||||||
* JSR VDU20 ; Reset colours
|
|
||||||
* JSR VDU26 ; Reset windows
|
|
||||||
* ; Drop through into VDU12, clear screen
|
|
||||||
|
|
||||||
|
|
||||||
VDU12 LDY VDUBYTES
|
|
||||||
DEY ; If VDUBYTE=1, text mode
|
|
||||||
BNE VDU12SOFT ; Graphics mode
|
|
||||||
JMP CLEAR
|
|
||||||
|
|
||||||
* Clear the screen
|
|
||||||
CLEAR STZ VDUTEXTY ; ROW
|
|
||||||
STZ VDUTEXTX ; COL
|
|
||||||
:L1 JSR CLRLINE
|
|
||||||
:S2 LDA VDUTEXTY ; ROW
|
:S2 LDA VDUTEXTY ; ROW
|
||||||
CMP #23
|
CMP #23
|
||||||
BEQ :S3
|
BEQ :S3
|
||||||
|
@ -594,66 +613,57 @@ CLEAR STZ VDUTEXTY ; ROW
|
||||||
BRA :L1
|
BRA :L1
|
||||||
:S3 STZ VDUTEXTY ; ROW
|
:S3 STZ VDUTEXTY ; ROW
|
||||||
STZ VDUTEXTX ; COL
|
STZ VDUTEXTX ; COL
|
||||||
|
BIT VDUSCREEN
|
||||||
|
BMI VDU12SOFT ; Graphics mode
|
||||||
RTS
|
RTS
|
||||||
|
* Clear the graphics screen buffer
|
||||||
VDU12SOFT JMP VDU16 ; *TEMP*
|
VDU12SOFT JMP VDU16 ; *TEMP*
|
||||||
|
|
||||||
|
VDU22G STA $C050 ; Enable Graphics
|
||||||
|
STA $C057 ; Hi-Res
|
||||||
|
STA $C054 ; PAGE1
|
||||||
|
STA $C00C ; Select 40col text
|
||||||
|
JMP VDU12 ; Clear text and HGR screen
|
||||||
|
|
||||||
* Clear screen line
|
* Clear to EOL
|
||||||
CLRLINE LDA VDUTEXTY ; ROW
|
CLRLINE
|
||||||
ASL
|
CLREOL JSR CHARADDR ; Set VDUADDR=>start of line
|
||||||
TAX
|
* BIT VDUBANK
|
||||||
LDA SCNTAB,X ; LSB of row
|
* BMI CLREOLGS ; AppleGS
|
||||||
STA ZP1
|
LDY #39
|
||||||
LDA SCNTAB+1,X ; MSB of row
|
LDA #$A0
|
||||||
STA ZP1+1
|
:L1 STA (VDUADDR),Y
|
||||||
LDA VDUTEXTX ; COL
|
PHP
|
||||||
PHA
|
SEI
|
||||||
STZ VDUTEXTX ; COL
|
STA $C004
|
||||||
:L1 LDA VDUTEXTX ; COL
|
STA (VDUADDR),Y
|
||||||
LSR
|
STA $C005
|
||||||
TAY
|
PLP
|
||||||
BCC :S1
|
DEY
|
||||||
>>> WRTMAIN
|
BPL :L1
|
||||||
:S1 LDA #" "
|
BIT VDUSCREEN
|
||||||
STA (ZP1),Y
|
BPL CLREOLOK
|
||||||
>>> WRTAUX
|
JMP HSCRCLREOL ; Clear an HGR line
|
||||||
LDA VDUTEXTX ; COL
|
CLREOLOK RTS
|
||||||
CMP #79
|
CLREOLGS LDX #1
|
||||||
BEQ :S2
|
:L2 LDY #39
|
||||||
INC VDUTEXTX ; COL
|
LDA #$A0
|
||||||
BRA :L1
|
:L3 DB $97,VDUADDR ; STA [VDUADDR],Y
|
||||||
:S2 PLA
|
DEY
|
||||||
STA VDUTEXTX ; COL
|
BPL :L3
|
||||||
LDY VDUBYTES
|
LDA VDUBANK
|
||||||
DEY ; If VDUBYTE=1, text mode
|
EOR #$01
|
||||||
BEQ :DONE
|
STA VDUBANK
|
||||||
LDA VDUTEXTY
|
DEX
|
||||||
ASL
|
BPL :L2
|
||||||
TAX
|
|
||||||
>>> WRTMAIN
|
|
||||||
LDA HGRTAB+0,X
|
|
||||||
STA HGRADDR+0
|
|
||||||
LDA HGRTAB+1,X
|
|
||||||
STA HGRADDR+1
|
|
||||||
>>> WRTAUX
|
|
||||||
>>> XF2MAIN,HCLRLINE
|
|
||||||
:DONE RTS
|
|
||||||
|
|
||||||
CLRLNRET >>> ENTAUX
|
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Scroll whole screen one line
|
* Scroll whole screen one line
|
||||||
SCROLLER LDA #$00
|
SCROLLER LDA #$00
|
||||||
:L1 PHA
|
:L1 PHA
|
||||||
JSR SCR1LINE ; Scroll text screen 1 line
|
JSR SCR1LINE
|
||||||
PLA
|
PLA
|
||||||
LDY VDUBYTES
|
INC
|
||||||
DEY ; If VDUBYTE=1, text mode
|
|
||||||
BEQ :TEXTONLY ; Text mode, skip HGR scroll
|
|
||||||
PHA
|
|
||||||
JSR HSCR1LINE ; Scroll HGR screen 1 text line
|
|
||||||
PLA
|
|
||||||
:TEXTONLY INC
|
|
||||||
CMP #23
|
CMP #23
|
||||||
BNE :L1
|
BNE :L1
|
||||||
BIT VDUSTATUS
|
BIT VDUSTATUS
|
||||||
|
@ -665,152 +675,117 @@ SCROLLER LDA #$00
|
||||||
:L2 RTS
|
:L2 RTS
|
||||||
|
|
||||||
* Copy line A+1 to line A
|
* Copy line A+1 to line A
|
||||||
SCR1LINE ASL ; Dest addr->ZP1
|
SCR1LINE PHA
|
||||||
TAX
|
JSR CHARADDRY ; VDUADDR=>line A
|
||||||
LDA SCNTAB,X
|
LDX #2
|
||||||
STA ZP1
|
:L1 LDA VDUADDR,X ; Copy to VDUADDR2
|
||||||
LDA SCNTAB+1,X
|
STA VDUADDR2,X
|
||||||
STA ZP1+1
|
DEX
|
||||||
INX ; Source addr->ZP2
|
BPL :L1
|
||||||
INX
|
PLA
|
||||||
LDA SCNTAB,X
|
PHA
|
||||||
STA ZP2
|
INC A
|
||||||
LDA SCNTAB+1,X
|
JSR CHARADDRY ; VDUADDR=>line A+1
|
||||||
STA ZP2+1
|
* BIT VDUBANK
|
||||||
LDY #$00
|
* BMI SCROLLGS
|
||||||
:L1 LDA (ZP2),Y
|
LDY #39
|
||||||
STA (ZP1),Y
|
:L2 LDA (VDUADDR),Y
|
||||||
|
STA (VDUADDR2),Y
|
||||||
|
PHP
|
||||||
|
SEI
|
||||||
STA $C002 ; Read main mem
|
STA $C002 ; Read main mem
|
||||||
>>> WRTMAIN
|
STA $C004 ; Write main mem
|
||||||
LDA (ZP2),Y
|
LDA (VDUADDR),Y
|
||||||
STA (ZP1),Y
|
STA (VDUADDR2),Y
|
||||||
STA $C003 ; Read aux mem
|
STA $C003 ; Read aux mem
|
||||||
>>> WRTAUX
|
STA $C005 ; Write aux mem
|
||||||
INY
|
PLP
|
||||||
CPY #40
|
DEY
|
||||||
BNE :L1
|
BPL :L2
|
||||||
|
PLA
|
||||||
|
BIT VDUSCREEN ; Also screen graphics screen
|
||||||
|
BMI SCR1SOFT
|
||||||
|
RTS
|
||||||
|
SCROLLGS LDX #1
|
||||||
|
:L4 LDY #39
|
||||||
|
:L5 DB $B7,VDUADDR ; LDA [VDUADDR],Y
|
||||||
|
DB $97,VDUADDR2 ; STA [VDUADDR2],Y
|
||||||
|
DEY
|
||||||
|
BPL :L5
|
||||||
|
LDA VDUBANK
|
||||||
|
EOR #$01
|
||||||
|
STA VDUBANK
|
||||||
|
STA VDUBANK2
|
||||||
|
DEX
|
||||||
|
BPL :L4
|
||||||
|
PLA
|
||||||
|
BIT VDUSCREEN ; Also screen graphics screen
|
||||||
|
BMI SCR1SOFT
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Copy text line A+1 to line A for HGR bitmap gfx mode
|
* Copy text line A+1 to line A for HGR bitmap gfx mode
|
||||||
HSCR1LINE >>> XF2MAIN,HGRSCR1L
|
SCR1SOFT JMP HSCR1LINE
|
||||||
HSCR1RET >>> ENTAUX
|
|
||||||
RTS
|
|
||||||
|
|
||||||
* VDU 1 - Send one character to printer
|
|
||||||
VDU01 RTS
|
|
||||||
|
|
||||||
* VDU 16 - CLG, clear graphics window
|
* VDU 16 - CLG, clear graphics window
|
||||||
VDU16 >>> XF2MAIN,CLRHGR
|
VDU16 JMP HSCRCLEAR
|
||||||
VDU16RET >>> ENTAUX
|
|
||||||
STZ XPIXEL+0
|
* VDU 20 - Reset to default colours
|
||||||
STZ XPIXEL+1
|
VDU20 LDA #$00 ; *TEMP*
|
||||||
LDA #191
|
STA $C034
|
||||||
STA YPIXEL
|
LDA #$F0
|
||||||
|
STA $C022
|
||||||
|
LDA #$00
|
||||||
|
LDX #$07
|
||||||
|
JSR HSCRSETGCOL
|
||||||
|
LDA #$00
|
||||||
|
LDX #$80
|
||||||
|
JSR HSCRSETGCOL
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* VDU 17 - COLOUR n - select text or border colour
|
* VDU 17 - COLOUR n - select text or border colour
|
||||||
VDU17 RTS
|
VDU17 LDA VDUQ+8 ; *TEMP*
|
||||||
|
JSR HSCRSETTCOL
|
||||||
|
* TO DO: set local VDU variables
|
||||||
|
AND #15
|
||||||
|
TAY
|
||||||
|
LDX CLRTRANS,Y
|
||||||
|
BIT VDUQ+8
|
||||||
|
BPL VDU17FGD
|
||||||
|
BVC VDU17BGD
|
||||||
|
STX $C034
|
||||||
|
RTS
|
||||||
|
VDU17BGD LDA $C022
|
||||||
|
AND #$F0
|
||||||
|
STA $C022
|
||||||
|
TXA
|
||||||
|
ORA $C022
|
||||||
|
STA $C022
|
||||||
|
VDU17FGD RTS
|
||||||
|
|
||||||
* VDU 18 - GCOL k,a - select graphics colour and plot action
|
* VDU 18 - GCOL k,a - select graphics colour and plot action
|
||||||
VDU18 LDA VDUQ+7 ; Argument 'k'
|
VDU18 LDA VDUQ+7 ; GCOL action
|
||||||
CMP #$04 ; k=4 means XOR
|
LDX VDUQ+8 ; GCOL colour
|
||||||
LDA #$00 ; Normal drawing mode
|
* TO DO: set local VDU variables
|
||||||
BNE :NORM
|
JSR HSCRSETGCOL
|
||||||
LDA #$01 ; XOR mode
|
|
||||||
:NORM >>> WRTMAIN
|
|
||||||
STA LINETYPE
|
|
||||||
STA FDRAWADDR+5
|
|
||||||
>>> WRTAUX
|
|
||||||
>>> XF2MAIN,SETLINE
|
|
||||||
VDU18RET1 >>> ENTAUX
|
|
||||||
:NORM LDA VDUQ+8 ; Argument 'a'
|
|
||||||
BPL :FOREGND ; <128 is foreground
|
|
||||||
>>> WRTMAIN
|
|
||||||
STA BGCOLOR ; Stored in main memory
|
|
||||||
>>> WRTAUX
|
|
||||||
RTS
|
|
||||||
:FOREGND >>> WRTMAIN
|
|
||||||
STA FGCOLOR ; Stored in main memory
|
|
||||||
>>> WRTAUX
|
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
* VDU 19 - Select palette colours
|
* VDU 19 - Select palette colours
|
||||||
VDU19 RTS
|
VDU19 RTS
|
||||||
|
|
||||||
* VDU 20 - Reset to default colours
|
|
||||||
VDU20 RTS
|
|
||||||
|
|
||||||
* VDU 23 - Program video system and define characters
|
* VDU 23 - Program video system and define characters
|
||||||
VDU23 RTS
|
VDU23 RTS
|
||||||
|
|
||||||
* VDU 24,left;bottom;right;top; - define graphics window
|
* VDU 25,k,x;y; - PLOT k,x,y - PLOT point, line, etc.
|
||||||
VDU24 RTS
|
|
||||||
|
|
||||||
* VDU 25,k,x;y; - PLOT k,x;y; - PLOT point, line, etc.
|
|
||||||
* x is in VDUQ+7,VDUQ+8
|
|
||||||
* y is in VDUQ+5,VDUQ+6
|
|
||||||
* k is in VDUQ+4
|
* k is in VDUQ+4
|
||||||
VDU25 JSR CVTCOORD ; Convert coordinate system
|
* x is in VDUQ+5,VDUQ+6
|
||||||
LDA VDUQ+4
|
* y is in VDUQ+7,VDUQ+8
|
||||||
AND #$04 ; Bit 2 set -> absolute
|
VDU25 JMP HGRPLOT
|
||||||
BNE :ABS
|
* TO DO:
|
||||||
JSR RELCOORD ; Add coords to XPIXEL/YPIXEL
|
* coord=coord+origin
|
||||||
:ABS LDA VDUQ+4
|
* scale coord
|
||||||
AND #$03
|
* call HGRPLOT
|
||||||
CMP #$0 ; Bits 0,1 clear -> just move
|
* copy this->last, coord->this
|
||||||
BNE :NOTMOVE
|
* check for Escape
|
||||||
JMP HGRPOS ; Just update pos
|
|
||||||
:NOTMOVE LDA VDUQ+4
|
|
||||||
AND #$C0
|
|
||||||
CMP #$40 ; Bit 7 clr, bit 6 set -> point
|
|
||||||
BNE :LINE
|
|
||||||
>>> WRTMAIN
|
|
||||||
LDA VDUQ+4
|
|
||||||
STA PLOTMODE
|
|
||||||
LDA VDUQ+5
|
|
||||||
STA FDRAWADDR+6 ; LSB of X1
|
|
||||||
LDA VDUQ+6
|
|
||||||
STA FDRAWADDR+7 ; MSB of X1
|
|
||||||
LDA VDUQ+7
|
|
||||||
STA FDRAWADDR+8 ; Y1
|
|
||||||
>>> WRTAUX
|
|
||||||
>>> XF2MAIN,DRAWPNT
|
|
||||||
:LINE >>> WRTMAIN
|
|
||||||
LDA VDUQ+4
|
|
||||||
STA PLOTMODE
|
|
||||||
LDA XPIXEL+0
|
|
||||||
STA FDRAWADDR+6
|
|
||||||
LDA XPIXEL+1
|
|
||||||
STA FDRAWADDR+7
|
|
||||||
LDA YPIXEL
|
|
||||||
STA FDRAWADDR+8
|
|
||||||
LDA VDUQ+5
|
|
||||||
STA FDRAWADDR+9 ; LSB of X1
|
|
||||||
LDA VDUQ+6
|
|
||||||
STA FDRAWADDR+10 ; MSB of X1
|
|
||||||
LDA VDUQ+7
|
|
||||||
STA FDRAWADDR+11 ; Y1
|
|
||||||
>>> WRTAUX
|
|
||||||
>>> XF2MAIN,DRAWLINE
|
|
||||||
VDU25RET >>> ENTAUX
|
|
||||||
* Fall through into HGRPOS
|
|
||||||
* Save pixel X,Y position
|
|
||||||
HGRPOS LDA VDUQ+5
|
|
||||||
STA XPIXEL+0
|
|
||||||
LDA VDUQ+6
|
|
||||||
STA XPIXEL+1
|
|
||||||
LDA VDUQ+7
|
|
||||||
STA YPIXEL
|
|
||||||
RTS
|
|
||||||
XPIXEL DW $0000 ; Previous plot x-coord
|
|
||||||
YPIXEL DB $00 ; Previous plot y-coord
|
|
||||||
|
|
||||||
* VDU 28,left,bottom,right,top - define text window
|
|
||||||
VDU28 RTS
|
|
||||||
|
|
||||||
* VDU 29,x;y; - define graphics origin
|
|
||||||
VDU29 RTS
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -827,10 +802,8 @@ BYTEA02 LDY VDUVARS+1,X
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
* PRINTER DRIVER
|
||||||
|
****************
|
||||||
|
* VDU 1 - Send one character to printer
|
||||||
|
VDU01 RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ GFXINIT JSR FDRAWADDR+0 ; Initialize FDRAW library
|
||||||
* Plot bitmap character on the HGR screen
|
* Plot bitmap character on the HGR screen
|
||||||
* On entry: char is in A
|
* On entry: char is in A
|
||||||
DRAWCHAR >>> ENTMAIN
|
DRAWCHAR >>> ENTMAIN
|
||||||
AND #$7F
|
* AND #$7F ; Don't!
|
||||||
STA A1L ; A*8 -> A1L,A1H
|
STA A1L ; A*8 -> A1L,A1H
|
||||||
STZ A1H
|
STZ A1H
|
||||||
ASL A1L
|
ASL A1L
|
||||||
|
@ -155,7 +155,8 @@ HCLRLINE >>> ENTMAIN
|
||||||
:L1 LDY #$00
|
:L1 LDY #$00
|
||||||
:L2 STA (A4L),Y
|
:L2 STA (A4L),Y
|
||||||
INY
|
INY
|
||||||
CPY #$39
|
* CPY #$39
|
||||||
|
CPY #40
|
||||||
BNE :L2
|
BNE :L2
|
||||||
INC A4H
|
INC A4H
|
||||||
INC A4H
|
INC A4H
|
||||||
|
|
Loading…
Reference in New Issue
Block a user