mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2025-02-19 21:30:37 +00:00
149 lines
6.1 KiB
NASM
149 lines
6.1 KiB
NASM
*``````````````````````````````*
|
|
* HOOKS.LORES *
|
|
* *
|
|
* THIS FILE INCLUDES HOODS AND *
|
|
* A FEW SUBROUTINES AND TABLES *
|
|
* USED BY THE REST OF THE LOW *
|
|
* RESOLUTION SUBROUTINES. *
|
|
* *
|
|
* AUTHOR: NATHAN RIGGS *
|
|
* CONTACT: NATHAN.RIGGS@ *
|
|
* OUTLOOK.COM *
|
|
* *
|
|
* DATE: 05-JUN-2021 *
|
|
* ASSEMBLER: MERLIN 8 PRO *
|
|
* LICENSE: APACHE 2.0 *
|
|
* OS: DOS 3.3 *
|
|
* *
|
|
* SIZE: 169 BYTES *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
TEXTOFF EQU $C050 ; TURN ON GRAPHICS MODE
|
|
TEXTON EQU $C051 ; TURN ON TEXT MODE
|
|
MIXEDOFF EQU $C052 ; SET FULLSCREEN MODE FOR GRAPHICS
|
|
MIXEDON EQU $C053 ; SET MIXED MODE FOR GRAPHICS
|
|
LORES EQU $C056 ; SOFT SWITCH FOR USING LORES GRAPHICS
|
|
HIRES EQU $C057 ; SOFT SWITCH TO SPECIFY HIRES GRAPHICS
|
|
VPG1 EQU $C054 ; SET THE VIEWING PAGE TO PAGE 1
|
|
VPG2 EQU $C055 ; SET THE VIEWING PAGE TO PAGE 2
|
|
LRGBCALC EQU $F847 ; FOR CALCULATING LORES COORDINATES
|
|
GBASLO EQU $26 ; LOW BYTE OF A PIXEL ADDRESS
|
|
GBASHI EQU $27 ; HIGHT BYTE OF PIXEL ADDRESS
|
|
*
|
|
]BLACK EQU $00 ; LORES COLOR BLACK
|
|
]MAGENTA EQU $01 ; LORES COLOR MAGENTA
|
|
]DBLUE EQU $02 ; LORES DARK BLUE
|
|
]PURPLE EQU $03 ; LORES COLOR PURPLE
|
|
]DGREEN EQU $04 ; LORES COLOR DARK GREEN
|
|
]GREY1 EQU $05 ; LORES COLOR FIRST GREY SHADE
|
|
]MBLUE EQU $06 ; LORES COLOR MEDIUM BLUE
|
|
]LBLUE EQU $07 ; LORES COLOR LIGHT BLUE
|
|
]BROWN EQU $08 ; LORES COLOR BROWN
|
|
]ORANGE EQU $09 ; LORES COLOR ORANGE
|
|
]GREY2 EQU $0A ; LORES COLORE GREY SHADE 2
|
|
]PINK EQU $0B ; LORES COLOR PINK
|
|
MGREEN EQU $0C ; LORES COLOR MEDIUM GREEN
|
|
]YELLOW EQU $0D ; LORES COLOR YELLOW
|
|
]AQUA EQU $0E ; LORES COLOR AQUAMARINE
|
|
]WHITE EQU $0F ; LORES COLOR WHITE
|
|
*
|
|
** THE LOCPLOT SUBROUTINE IS IN THE HOOKS FILE
|
|
** BECAUSE IT IS USED, IN SOME CAPACITY, BY THE
|
|
** REST OF THE LORES LIBRARY.
|
|
*
|
|
JMP ]EOF {3C3B}
|
|
*
|
|
]LOCCOL DS 1 ; {0C1B} LOCAL PLOT COLOR
|
|
]MASK DS 2 ; {0C2B} MASK FOR ISOLATING NIBBLE
|
|
]COLMASK DS 2 ; {0C2B} COLOR MASK
|
|
]X DS 1 ; {OC1B} X COORDINATE FOR PLOT
|
|
]Y DS 1 ; {0C1B} Y COORDINATE FOR PLOT
|
|
]PAGEOFF DS 1 ; {0C1B} PAGE OFFSET
|
|
*
|
|
*``````````````````````````````*
|
|
* LOCPLOT *
|
|
* *
|
|
* PLOT AT A GIVEN X,Y POINT IN *
|
|
* A GIVEN COLOR. *
|
|
* *
|
|
* INPUT *
|
|
* *
|
|
* .X = X POSITION *
|
|
* .Y = Y POSITION *
|
|
* .A = COLOR CODE *
|
|
* *
|
|
* DESTROY: NZCIDV *
|
|
* ^^^ ^ *
|
|
* *
|
|
* CYCLES: 168+ *
|
|
* SIZE: 109 BYTES *
|
|
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
|
|
*
|
|
LOCPLOT
|
|
*
|
|
STY ]Y ; {4C3B} Y POSITION PASSED IN .Y
|
|
STX ]X ; {4C3B} X POSITION PASSED IN .X
|
|
STA ]LOCCOL ; {4C3B} COLOR PASSED IN .A
|
|
LDA ]LOCCOL ; {4C3B} TAKE THE COLOR SENT
|
|
ASL ; {2C1B} AND MOVE IT LEFT 4 BITS
|
|
ASL ; {2C1B} TO THE HIGH BYTE
|
|
ASL ; {2C1B}
|
|
ASL ; {2C1B}
|
|
CLC ; {2C1B} CLEAR CARRY
|
|
ADC ]LOCCOL ; {4C3B} NOW ADD THE LOW BYTE, MEANING
|
|
STA ]LOCCOL ; {4C3B} COLOR WILL BE REPEATING NIBBLES
|
|
LDA LWP ; {4C3B} LOAD THE WORKING PAGE FLAG
|
|
CMP #2 ; {3C2B} IF WORKING PAGE IS NOT PAGE 2,
|
|
BNE :PG1 ; {3C2B} THEN ASSUME IT'S PAGE 1.
|
|
LDA #4 ; {3C2B} ELSE, SET OFFSET FOR PAGE 2
|
|
STA ]PAGEOFF ; {4C3B} STORE IN THE PAGE OFFSET
|
|
JMP :CNT ; {3C3B} SKIP TO CONTINUE ROUTINE
|
|
:PG1
|
|
LDA #0 ; {3C2B} OTHERWISE, IT'S PAGE ONE
|
|
STA ]PAGEOFF ; {4C3B} SO THERE IS NO PAGE OFFSET
|
|
:CNT
|
|
LDA #0 ; {3C2B}
|
|
LDY #0 ; {3C2B}
|
|
LDX #0 ; {3C2B}
|
|
LDA ]Y ; {4C3B} GET Y COORDINATE
|
|
LSR ; {2C1B} SHIFT BOTTOM BIT TO CARRY
|
|
BCC :EVEN ; {3C2B} IF CARRY = 0, THEN ROW IS EVEN
|
|
LDX #$F0 ; {3C2B} OTHERWISE, IT IS ODD; SO MASK
|
|
; THE LEFT NIBBLE
|
|
BCS :LPLOT ; {3C2B} IF CARRY SET, BR TO PLOTTING
|
|
:EVEN
|
|
LDX #$0F ; {3C2B} EVEN, SO MASK LOW BYTE
|
|
:LPLOT
|
|
STX ]MASK ; {3C2B} STORE THE EVEN OR ODD MASK
|
|
ASL ; {2C1B} SHIFT CARRY BACK INTO BYTE
|
|
TAY ; {2C1B} HOLD VALUE INTO .Y
|
|
LDA LROFF,Y ; {5C3B} GET LORES MEMORY ADDRESS
|
|
CLC ; {2C1B} CLEAR THE CARRY
|
|
ADC ]X ; {4C3B} ADD THE X COORDINATE
|
|
STA GBASLO ; {4C3B} STORE LOW BYTE FOR GBASCALC
|
|
INY ; {2C1B} INCREASE Y OFFSET
|
|
LDA LROFF,Y ; {5C3B} GET LORESS MEMORY ADDRESS
|
|
ADC ]PAGEOFF ; {4C3B} ADJUST FOR PAGE AND CARRY HIGH
|
|
STA GBASHI ; {4C3B} STORE HIGH BYTE FOR GBASCALC
|
|
LDY #0 ; {3C2B}
|
|
LDA ]MASK ; {4C3B} RELOAD THE MASK
|
|
EOR #$FF ; {2C2B} EXCLUSIVE OR THE MASK
|
|
AND (GBASLO),Y ; {6C2B} AND THE LOW FOR GBAS
|
|
STA ]COLMASK ; {4C3B} STORE THE COLOR MASK
|
|
LDA ]LOCCOL ; {4C3B} LOAD THE COLOR
|
|
AND ]MASK ; {4C3B} AND THE MASK
|
|
ORA ]COLMASK ; {4C3B} OR WITH THE COLOR MASK
|
|
STA (GBASLO),Y ; {6C2B} STORE INTO GBAS LOW BYTE
|
|
RTS ; {6C1B}
|
|
*
|
|
LWP DS 1,1 ; {OC1B} BYTE TO DETERMIN WORK PAGE
|
|
*
|
|
** THE FOLLOWING TABLE HELPS WITH FASTER PLOTTING TO THE
|
|
** LOW RESOLUTION SCREEN.
|
|
*
|
|
LROFF DW $400,$480,$500,$580,$600,$680,$700,$780 ; {0C16B}
|
|
DW $428,$4A8,$528,$5A8,$628,$6A8,$728,$7A8 ; {0C16B}
|
|
DW $450,$4D0,$550,$5D0,$650,$6D0,$750,$7D0 ; {0C16B}
|
|
*
|
|
]EOF
|