Graphics initialization

This commit is contained in:
Bill Chatfield 2020-05-21 19:37:47 -04:00
parent 60a952e178
commit e423a46e2f
4 changed files with 105 additions and 76 deletions

3
.gitignore vendored
View File

@ -2,6 +2,9 @@
*~
*.swp
# Build process output
as65-output.txt
# Prerequisites
*.d

View File

@ -63,10 +63,19 @@ DONE POPY
; *
;*******************************
PUTF .MACRO
JSR FOUT ;CONVERT FAC TO STRING
STA \0 ;STORE LOW BYTE OF STRING
STY \0+1 ;STORE HIGH BYTE OF STRING
PUTS (\0) ;PRINT STRING
.ENDM
PUTF .MACRO
JSR FOUT ;CONVERT FAC TO STRING
STA \0 ;STORE LOW BYTE OF STRING
STY \0+1 ;STORE HIGH BYTE OF STRING
PUTS (\0) ;PRINT STRING
.ENDM
; Overwrites A and Y
HLIN .MACRO x1,x2,y
ldy x1 ;Leftmost X coordinate
lda x2
sta H2 ;Rightmost X coordinate
lda y ;Y coordinate
jsr HLINE
.ENDM

View File

@ -9,23 +9,28 @@
.include "symbols.s"
.include "macros.s"
main jsr seedRandomNumGenerator
main
jsr seedRandomNumGenerator
jsr initLoResFullScreen
jsr setRandomColor ;Set the color
jsr drawHallway
jsr drawRoom
jsr waitForKeypress
sta TEXTON
rts
drawHallway
lda #16
jsr generateRandomInt
sta x2 ;Rightmost X coordinate
HLIN #0,x2,#10
rts
setupGraphics
jsr activateLoResPage1
lda #10
ldy #10
jsr PLOT
jsr activateTextPage1
initLoResFullScreen
sta TEXTOFF ;Enable graphics
sta HIRESOFF ;Enable Lo-res
sta MIXEDOFF ;Full screen
jsr CLRSCR ;Clear the screen
rts
; Add A to FAC leaving result in FAC
@ -85,6 +90,6 @@ generateRandomPositive
setRandomColor
lda #15 ;Max color number
jsr generateRandomPositive
jsr SETCOL ;Set the color
jsr SETCOLR ;Set the color
rts

View File

@ -7,9 +7,22 @@
; *
;*******************************
RNDL .EQU $4e ;Continuously incremented while waiting for keyboard input
RNDH .EQU $4f ;High byte of RNDL
FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT
;*******************************
; *
; LORES ZERO PAGE ADDRESSES *
; *
;*******************************
GBASL .EQU $26
GRASH .EQU $27
H2 .EQU $2C
V2 .EQU $20
MASK .EQU $2E
COLOR .EQU $30
RNDL .EQU $4e ;Continuously incremented while waiting for keyboard input
RNDH .EQU $4f ;High byte of RNDL
FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT
;*******************************
; *
@ -18,27 +31,26 @@ FACEXP .EQU $9d ;Address of FAC exponent used by FADDT,FSUBT,FMULTT,FDIVT
; *
;*******************************
KBD .EQU $C000 ;BIT 7 IS 1 IF KEY PRESSED
KBDSTRB .EQU $C010 ;CLEARS KBD BIT 7
CLR80STO .EQU $C000 ;ALLOW PAGE2 PG1 & PG2 SWITCHING
SET80STO .EQU $C001 ;ALLOW PAGE2 MAIN & AUX SWITCHNG
STO80 .EQU $C018 ;1=PAGE2 SWITCHES MAIN/AUX
;0=PAGE2 SWITCHES VIDEO PAGES
CLR80VID .EQU $C00C ;TURN OFF 80-COL DISPLAY
SET80VID .EQU $C00D ;TURN ON 80-COL DISPLAY
COL80 .EQU $C01F ;0=40 COL IS ON, 1=80 COL IS ON
TEXTOFF .EQU $C050 ;SELECTS GRAPHICS MODE
TEXTON .EQU $C051 ;SELECTS TEXT MODE
TEXT .EQU $C01A ;1=TEXT MODE ACTIVE,0=GRAPH MODE
MIXEDOFF .EQU $C052 ;USE FULL-SCREEN GRAPHICS
MIXEDON .EQU $C053 ;USE GRAPHICS WITH 4 LINES TEXT
MIXED .EQU $C01B ;0=FULL SCREEN, 1=MIXED
PAGE2OFF .EQU $C054 ;SELECTS PAGE1 OR MAIN VID MEM
PAGE2ON .EQU $C055 ;SELECTS PAGE2 OR AUX VID MEM
PAGE2 .EQU $C01C ;1=VID PG2 SELECTED OR AUX SEL
HIRESOFF .EQU $C056 ;SELECTS LOW-RES GRAPHICS
HIRESON .EQU $C057 ;SELECTS HIGH-RES GRAPHICS
HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES
KBD .EQU $C000 ;BIT 7 IS 1 IF KEY PRESSED
KBDSTRB .EQU $C010 ;CLEARS KBD BIT 7
CLR80STO .EQU $C000 ;ALLOW PAGE2 PG1 & PG2 SWITCHING
SET80STO .EQU $C001 ;ALLOW PAGE2 MAIN & AUX SWITCHNG
STO80 .EQU $C018 ;1=PAGE2 SWITCHES MAIN/AUX ;0=PAGE2 SWITCHES VIDEO PAGES
CLR80VID .EQU $C00C ;TURN OFF 80-COL DISPLAY
SET80VID .EQU $C00D ;TURN ON 80-COL DISPLAY
COL80 .EQU $C01F ;0=40 COL IS ON, 1=80 COL IS ON
TEXTOFF .EQU $C050 ;SELECTS GRAPHICS MODE
TEXTON .EQU $C051 ;SELECTS TEXT MODE
TEXT .EQU $C01A ;1=TEXT MODE ACTIVE,0=GRAPH MODE
MIXEDOFF .EQU $C052 ;USE FULL-SCREEN GRAPHICS
MIXEDON .EQU $C053 ;USE GRAPHICS WITH 4 LINES TEXT
MIXED .EQU $C01B ;0=FULL SCREEN, 1=MIXED
PAGE2OFF .EQU $C054 ;SELECTS PAGE1 OR MAIN VID MEM
PAGE2ON .EQU $C055 ;SELECTS PAGE2 OR AUX VID MEM
PAGE2 .EQU $C01C ;1=VID PG2 SELECTED OR AUX SEL
HIRESOFF .EQU $C056 ;SELECTS LOW-RES GRAPHICS
HIRESON .EQU $C057 ;SELECTS HIGH-RES GRAPHICS
HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES
;*******************************
; *
@ -49,29 +61,29 @@ HIRES .EQU $C01D ;0=LOW-RES, 1=HIGH-RES
; *
;*******************************
STROUT .EQU $DB3A ;PRINT STRING IN Y,A
GIVAYF .EQU $E2F2 ;CONVERT 2-BYTE INT A(HI) Y(LO) TO FLOAT IN FAC
CONINT .EQU $E6FB ;CONVERT FAC TO BYTE IN X, ERR IF FAC > 255
FADD .EQU $E7BE ;FAC = MEM + FAC, MEM ADDR IS Y(HI) A(LO)
FSUB .EQU $E7A7 ;FAC = MEM - FAC, MEM ADDR IS Y(HI) A(LO)
FMULT .EQU $E97F ;FAC = MEM * FAC, MEM ADDR IS Y(HI) A(LO)
FDIV .EQU $EA66 ;FAC = MEM / FAC, MEM ADDR IS Y(HI) A(LO)
FADDT .EQU $E7C1 ;FAC = ARG + FAC, MUST LOAD FACEXP INTO A FIRST
FSUBT .EQU $E7AA ;FAC = ARG - FAC, MUST LOAD FACEXP INTO A FIRST
FMULTT .EQU $E982 ;FAC = ARG * FAC, MUST LOAD FACEXP INTO A FIRST
FDIVT .EQU $EA69 ;FAC = ARG / FAC, MUST LOAD FACEXP INTO A FIRST
MUL10 .EQU $EA39 ;MULTIPLY FAC BY 10
FCOMP .EQU $EBB2 ;COMP MEM TO FAC
QINT .EQU $EBF2 ;CONVERT FAC TO INTEGER
FLOAT .EQU $EB93 ;CONVERT A TO FAC, I THINK
MOVAF .EQU $EB63 ;MOVE FAC INTO ARG
MOVMF .EQU $EB2B ;MOVE FAC TO MEMORY Y,X
MOVFA .EQU $EB53 ;MOVE ARG TO FAC
MOVFM .EQU $EB2B ;MOVE MEMORY TO FAC
INT .EQU $EC23 ;APPLESOFT INT FUNCTION
PRINTFAC .EQU $ED2E ;PRINT FAC. USES FOUT,STROUT
FOUT .EQU $ED34 ;FAC TO STRING, FAC DESTROYED
RND .EQU $EFAE ;APPLESOFT RND FUNCTION
STROUT .EQU $DB3A ;PRINT STRING IN Y,A
GIVAYF .EQU $E2F2 ;CONVERT 2-BYTE INT A(HI) Y(LO) TO FLOAT IN FAC
CONINT .EQU $E6FB ;CONVERT FAC TO BYTE IN X, ERR IF FAC > 255
FADD .EQU $E7BE ;FAC = MEM + FAC, MEM ADDR IS Y(HI) A(LO)
FSUB .EQU $E7A7 ;FAC = MEM - FAC, MEM ADDR IS Y(HI) A(LO)
FMULT .EQU $E97F ;FAC = MEM * FAC, MEM ADDR IS Y(HI) A(LO)
FDIV .EQU $EA66 ;FAC = MEM / FAC, MEM ADDR IS Y(HI) A(LO)
FADDT .EQU $E7C1 ;FAC = ARG + FAC, MUST LOAD FACEXP INTO A FIRST
FSUBT .EQU $E7AA ;FAC = ARG - FAC, MUST LOAD FACEXP INTO A FIRST
FMULTT .EQU $E982 ;FAC = ARG * FAC, MUST LOAD FACEXP INTO A FIRST
FDIVT .EQU $EA69 ;FAC = ARG / FAC, MUST LOAD FACEXP INTO A FIRST
MUL10 .EQU $EA39 ;MULTIPLY FAC BY 10
FCOMP .EQU $EBB2 ;COMP MEM TO FAC
QINT .EQU $EBF2 ;CONVERT FAC TO INTEGER
FLOAT .EQU $EB93 ;CONVERT A TO FAC, I THINK
MOVAF .EQU $EB63 ;MOVE FAC INTO ARG
MOVMF .EQU $EB2B ;MOVE FAC TO MEMORY Y,X
MOVFA .EQU $EB53 ;MOVE ARG TO FAC
MOVFM .EQU $EB2B ;MOVE MEMORY TO FAC
INT .EQU $EC23 ;APPLESOFT INT FUNCTION
PRINTFAC .EQU $ED2E ;PRINT FAC. USES FOUT,STROUT
FOUT .EQU $ED34 ;FAC TO STRING, FAC DESTROYED
RND .EQU $EFAE ;APPLESOFT RND FUNCTION
;*******************************
; *
@ -82,19 +94,19 @@ RND .EQU $EFAE ;APPLESOFT RND FUNCTION
; *
;*******************************
PLOT .EQU $F800 ;PLOT LO-RES BLOCK IN CURRENT COLOR A=VERT, Y=HORZ
HLINE .EQU $F819 ;HORIZONTAL LINE
VLINE .EQU $F828 ;VERTICAL LINE
CLRSCR .EQU $F832 ;CLEAR LOW-RES SCREEN
CLRTOP .EQU $F836 ;CLEAR THE TOP OF LOW-RES
NEXTCOL .EQU $F85F ;INCREMENT COLOR BY 3
SETCOL .EQU $F864 ;SET LOW-RES GRAPHICS COLOR
SCRN .EQU $F871 ;READ THE LOW-RES SCREEN
TEXTCMD .EQU $FB2F
TEXTMODE .EQU $FB39
GR .EQU $FB40 ;BASIC GR COMMAND
WAIT .EQU $FCA8
COUT .EQU $FDED ;WRITE A CHARACTER
CROUT .EQU $FD8E ;WRITE A CARRIAGE RETURN
PRBYTE .EQU $FDDA ;PRINT VALUE OF BYTE
PLOT .EQU $F800 ;PLOT LO-RES BLOCK IN CURRENT COLOR A=VERT, Y=HORZ
HLINE .EQU $F819 ;Horizontal line: A=Ycoord, Y=LEFTX, H2=RightX
VLINE .EQU $F828 ;VERTICAL LINE
CLRSCR .EQU $F832 ;CLEAR LOW-RES SCREEN
CLRTOP .EQU $F836 ;CLEAR THE TOP OF LOW-RES
NEXTCOL .EQU $F85F ;INCREMENT COLOR BY 3
SETCOLR .EQU $F864 ;SET LOW-RES GRAPHICS COLOR
SCRN .EQU $F871 ;READ THE LOW-RES SCREEN
TEXTCMD .EQU $FB2F
TEXTMODE .EQU $FB39
GR .EQU $FB40 ;BASIC GR COMMAND
WAIT .EQU $FCA8
COUT .EQU $FDED ;WRITE A CHARACTER
CROUT .EQU $FD8E ;WRITE A CARRIAGE RETURN
PRBYTE .EQU $FDDA ;PRINT VALUE OF BYTE