mirror of
https://github.com/antoinevignau/source.git
synced 2025-04-09 22:37:25 +00:00
181 lines
3.6 KiB
ArmAsm
181 lines
3.6 KiB
ArmAsm
*
|
|
* HGR & DHGR
|
|
*
|
|
* (c) 2025, Brutal Deluxe Software
|
|
*
|
|
|
|
org $1000
|
|
mx %11
|
|
lst off
|
|
|
|
*----------------------------------------
|
|
* Switch HGR/DHGR on/off
|
|
*----------------------------------------
|
|
|
|
*----------------------------------------
|
|
* APPLE II MEMORY MAP
|
|
*
|
|
* Main memory:
|
|
* $2000..$3FFF: PAGE1
|
|
* $4000..$5FFF: PAGE2
|
|
*
|
|
* Auxiliary memory:
|
|
* $2000..$3FFF: PAGE1X
|
|
* $4000..$5FFF: PAGE2X
|
|
*
|
|
|
|
*----------------------------------------
|
|
* APPLE II FILE FORMATS
|
|
*
|
|
* HGR picture:
|
|
* - One binary file of size $1FF8 or $2000
|
|
*
|
|
* DHGR picture:
|
|
* - One binary file of $4000 bytes
|
|
* - The first $2000 for the AUX mem part
|
|
* - The second for the MAIN mem part
|
|
*
|
|
* Programmers usually do:
|
|
* - load the first $2000 bytes at $2000
|
|
* - move them to $2000..$3FFF in AUX mem
|
|
* - load the last $2000 bytes at $2000
|
|
*
|
|
* Or, if the file is entirely in memory:
|
|
* - move $2000..$3FFF MAIN to $2000 AUX
|
|
* - move $4000..$5FFF MAIN to $2000 MAIN
|
|
*
|
|
|
|
*----------------------------------------
|
|
* EQUATES
|
|
*----------------------------------------
|
|
|
|
CLR80COL = $c000 ;disable 80 column store
|
|
SET80COL = $c001 ;enable 80 column store
|
|
RDMAINRAM = $c002 ;read from main 48K RAM
|
|
RDCARDRAM = $c003 ;read from alt. 48K RAM
|
|
WRMAINRAM = $c004 ;write to main 48K RAM
|
|
WRCARDRAM = $c005 ;write to alt. 48K RAM
|
|
CLR80VID = $c00c ;disable 80 column hardware
|
|
SET80VID = $c00d ;enable 80 column hardware
|
|
|
|
TXTCLR = $c050 ;switch in graphics (not text)
|
|
TXTSET = $c051 ;switch in text (not graphics)
|
|
MIXCLR = $c052 ;clear mixed-mode
|
|
MIXSET = $c053 ;set mixed-mode (4 lines text)
|
|
TXTPAGE1 = $c054 ;switch in text page 1
|
|
TXTPAGE2 = $c055 ;switch in text page 2
|
|
LORES = $c056 ;low-resolution graphics
|
|
HIRES = $c057 ;high-resolution graphics
|
|
SETAN0 = $c058 ;Clear annunciator 0
|
|
CLRAN0 = $c059 ;Set annunciator 0
|
|
SETAN1 = $c05a ;Clear annunciator 1
|
|
CLRAN1 = $c05b ;Set annunciator 1
|
|
SETAN2 = $c05c ;Clear annunciator 2
|
|
CLRAN2 = $c05d ;Set annunciator 2
|
|
SETAN3 = $c05e ;Clear annunciator 3
|
|
CLRAN3 = $c05f ;Set annunciator 3
|
|
|
|
AUXMOVE = $c311 ;80-col firmware move from/to AUX/MAIN RAM
|
|
MOVE = $fe2c ;Firmware - Move RAM
|
|
|
|
*----------------------------------------
|
|
* SET HGR ON
|
|
*----------------------------------------
|
|
|
|
setHGR lda TXTCLR
|
|
lda MIXCLR
|
|
lda TXTPAGE1
|
|
lda HIRES
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* SET HGR OFF
|
|
*----------------------------------------
|
|
|
|
unsetHGR lda LORES
|
|
lda TXTPAGE1
|
|
lda MIXSET
|
|
lda TXTSET
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* MOVE PICTURE INTO MEMORY
|
|
*----------------------------------------
|
|
|
|
movePICTURE lda #$00 ; move $2000..$3fff MAIN
|
|
sta $3C ; to $2000..$3fff AUX
|
|
lda #$20
|
|
sta $3D
|
|
lda #$FF
|
|
sta $3E
|
|
lda #$3F
|
|
sta $3F
|
|
lda #$00
|
|
sta $42
|
|
lda #$20
|
|
sta $43
|
|
sec ; move from MAIN to AUX
|
|
jsr AUXMOVE
|
|
|
|
lda #$00 ; move $4000..$5fff MAIN
|
|
sta $3C ; to $2000..$3fff MAIN
|
|
lda #$40
|
|
sta $3D
|
|
lda #$FF
|
|
sta $3E
|
|
lda #$5F
|
|
sta $3F
|
|
lda #$00
|
|
sta $42
|
|
lda #$20
|
|
sta $43
|
|
ldy #$00
|
|
jsr MOVE
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* SET DHGR COLOR ON
|
|
*----------------------------------------
|
|
|
|
setDHGRCOLOR sta SET80COL
|
|
sta SET80VID
|
|
sta TXTCLR
|
|
sta MIXCLR
|
|
sta TXTPAGE1
|
|
sta HIRES
|
|
sta SETAN3
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* SET DHGR MONOCHROME ON
|
|
*----------------------------------------
|
|
|
|
setDHGRMONO lda TXTCLR
|
|
lda MIXCLR
|
|
lda TXTPAGE1
|
|
lda HIRES
|
|
ldx #2
|
|
]lp sta SET80COL
|
|
sta CLRAN2
|
|
sta CLR80VID
|
|
sta SETAN3
|
|
sta CLRAN3
|
|
sta SET80VID
|
|
sta SETAN3
|
|
dex
|
|
bne ]lp
|
|
rts
|
|
|
|
*----------------------------------------
|
|
* SET DHGR COLOR/MONOCHROME OFF
|
|
*----------------------------------------
|
|
|
|
unsetDHGRMONO sta CLRAN3
|
|
unsetDHGRCOLOR sta LORES
|
|
sta TXTPAGE1
|
|
sta MIXSET
|
|
sta TXTSET
|
|
sta CLR80VID
|
|
sta CLR80COL
|
|
rts
|