Version 31

This commit is contained in:
Michaelangel007 2017-10-29 20:27:05 -07:00
parent 78b40062e7
commit 85f890a30e
4 changed files with 107 additions and 42 deletions

View File

@ -13,6 +13,10 @@
5. `BLOAD TUT.DHGR` 5. `BLOAD TUT.DHGR`
6. `BRUN DHGR.BYTE` 6. `BRUN DHGR.BYTE`
Ver 31.
- Added `:` to save a sprite to mem
- Added `;` to copy a sprite from to the DHGR screen
Ver 30. Ver 30.
- Added beep for illegal keys - Added beep for illegal keys
- Added sprite info - Added sprite info

Binary file not shown.

Binary file not shown.

View File

@ -6,7 +6,7 @@ CONFIG_BIOS = 0 ; 1=Use slow ROM for text, 0=Use native code for COUT, HOME
; DHGR Byte Inspector ; DHGR Byte Inspector
; Michael Pohoreski ; Michael Pohoreski
; https://github.com/Michaelangel007/apple2_hgrbyte/ ; https://github.com/Michaelangel007/apple2_hgrbyte/
; Version 30 ; Version 31
; ;
; TL:DR; ; TL:DR;
; IJKL to move ; IJKL to move
@ -189,7 +189,7 @@ __MAIN = $900
ORG __MAIN ORG __MAIN
DhgrByte DhgrByte
LDA #30 ; Version - copy HGR1 to aux, HGR2 to HGR1 LDA #31 ; Version - copy HGR1 to aux, HGR2 to HGR1
JSR Init_Exit ; FEATURE: Set to 00 if you don't want to copy AUX $2000 to MAIN $4000 JSR Init_Exit ; FEATURE: Set to 00 if you don't want to copy AUX $2000 to MAIN $4000
CLC CLC
BCC _Center BCC _Center
@ -537,10 +537,10 @@ GotoInputCancel
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
OnResetRegion OnResetRegion
JSR ZeroRegion JSR ZeroRegion
STA tSprite1 + SPRITE_X STA gSprite1X
STA tSprite1 + SPRITE_Y STA gSprite1Y
STA tSprite2 + SPRITE_X STA gSprite2X
STA tSprite2 + SPRITE_Y STA gSprite2Y
LDA flags LDA flags
AND #$FF - {FLAG_REGION_1 + FLAG_REGION_2 + FLAG_REG_EVEN} AND #$FF - {FLAG_REGION_1 + FLAG_REGION_2 + FLAG_REG_EVEN}
@ -551,8 +551,8 @@ RegionTrampoline1
ZeroRegion ZeroRegion
LDA #0 LDA #0
SetSprite1WH SetSprite1WH
STA tSprite1 + SPRITE_W STA gSprite1W
STA tSprite1 + SPRITE_H STA gSprite1H
RTS RTS
; --------- ; ---------
@ -579,8 +579,8 @@ NoRegion1
STA flags STA flags
LDX cursor_col LDX cursor_col
LDY cursor_row LDY cursor_row
STX tSprite1 + SPRITE_X STX gSprite1X
STY tSprite1 + SPRITE_Y STY gSprite1Y
DoneSprite DoneSprite
JMP Status JMP Status
@ -590,40 +590,44 @@ NoRegion2
STA flags STA flags
LDX cursor_col LDX cursor_col
LDY cursor_row LDY cursor_row
STX tSprite2 + SPRITE_X STX gSprite2X
STY tSprite2 + SPRITE_Y STY gSprite2Y
CalcWidth CalcWidth
TXA TXA
SEC SEC
SBC tSprite1 + SPRITE_X SBC gSprite1X
BCS SaveWidth BCS SaveWidth
EOR #$FF EOR #$FF
SaveWidth SaveWidth
TAX TAX
INX INX
STX tSprite1 + SPRITE_W STX gSprite1W
CalcHeight CalcHeight
TYA TYA
SEC SEC
SBC tSprite1 + SPRITE_Y SBC gSprite1Y
BCS SaveHeight BCS SaveHeight
EOR #$FF EOR #$FF
SaveHeight SaveHeight
TAY TAY
INY INY
STY tSprite1 + SPRITE_H STY gSprite1H
BRA DoneSprite BRA DoneSprite
SetSpriteBase
LDX #>SPRITE_BASE
LDY #<SPRITE_BASE
STX zSpritePtr+1
STY zSpritePtr+0
RTS
; --- Save Sprite --- ; --- Save Sprite ---
OnSaveSprite OnSaveSprite
LDA tSprite1 + SPRITE_W LDA gSprite1W
ORA tSprite1 + SPRITE_H ORA gSprite1H
BNE ValidDimensions BEQ InvalidSprite ; v- Below
JSR SoftBeep
BRA DoneSprite
ValidDimensions ValidDimensions
; Copy from interleaved memory to linear format ; Copy from interleaved memory to linear format
@ -632,17 +636,14 @@ ValidDimensions
LDA gSprite1H LDA gSprite1H
STA gSpriteH STA gSpriteH
LDX #>SPRITE_BASE JSR SetSpriteBase
LDY #<SPRITE_BASE
STX zSpritePtr+1
STY zSpritePtr+0
LDX #0 LDX #0
CopySpriteMeta CopySpriteMeta
LDA tSprite1,X LDA gSprite1X,X
JSR PutSpriteData JSR PutSpriteData
INX INX
CPX #tSprite2 - tSprite1 CPX #1 + gSprite1H - gSprite1X ; X,Y,W,H
BNE CopySpriteMeta BNE CopySpriteMeta
SaveRows SaveRows
@ -686,9 +687,60 @@ SaveCols
; Re-load the scanline addr ; Re-load the scanline addr
JMP GetByte JMP GetByte
; ----------
InvalidSprite
JMP BadInput
; JSR SoftBeep
; BRA DoneSprite
; ----------
; --- Save Sprite --- ; --- Save Sprite ---
OnLoadSprite OnLoadSprite
JMP DoneSprite JSR SetSpriteBase
JSR GetSpriteData ; skip X
JSR GetSpriteData ; skip Y
JSR GetSpriteData ; get W
CMP #0
BEQ InvalidSprite
STA gSpriteW
CLC
ADC cursor_col
STA gSpriteX2 ; end col
JSR GetSpriteData ; get H
CMP #0
BEQ InvalidSprite
STA gSpriteH
LDA cursor_row
STA gSpriteY
LoadRows
; Y -> Source Address
LDA gSpriteY
JSR GetHgrBaseAddr
LDA cursor_col
STA gSpriteX
LoadCols
JSR GetSpriteData
TAX
LDA gSpriteX
JSR PutCursorByteX ; X=Byte, A=Col
INC gSpriteX
LDA gSpriteX
CMP gSpriteX2
BNE LoadCols
INC gSpriteY
DEC gSpriteH
LDA gSpriteH
BNE LoadRows
JMP GetByte
; --- Sprite --- ; --- Sprite ---
PutSpriteData PutSpriteData
@ -794,11 +846,11 @@ DrawStatus
AND #FLAG_REGION_1 AND #FLAG_REGION_1
BEQ PrintNoRegion1 BEQ PrintNoRegion1
LDA tSprite1 + SPRITE_X LDA gSprite1X
LDX #'X'+$80 LDX #'X'+$80
LDY #'1'+$80 LDY #'1'+$80
JSR PrintSpriteMeta JSR PrintSpriteMeta
LDA tSprite1 + SPRITE_Y LDA gSprite1Y
LDX #'Y'+$80 LDX #'Y'+$80
LDY #'1'+$80 LDY #'1'+$80
JSR PrintSpriteMeta JSR PrintSpriteMeta
@ -882,11 +934,11 @@ HaveMemType
AND #FLAG_REGION_2 AND #FLAG_REGION_2
BEQ PrintNoRegion2 BEQ PrintNoRegion2
LDA tSprite2 + SPRITE_X LDA gSprite2X
LDX #'X'+$80 LDX #'X'+$80
LDY #'2'+$80 LDY #'2'+$80
JSR PrintSpriteMeta JSR PrintSpriteMeta
LDA tSprite2 + SPRITE_Y LDA gSprite2Y
LDX #'Y'+$80 LDX #'Y'+$80
LDY #'2'+$80 LDY #'2'+$80
JMP PrintSpriteMeta JMP PrintSpriteMeta
@ -909,11 +961,11 @@ PrintStatusLine3
LDY #>sTextFooter3 LDY #>sTextFooter3
JSR PrintStringZ JSR PrintStringZ
LDA tSprite1 + SPRITE_W LDA gSprite1W
LDX #' '+$80 LDX #' '+$80
LDY #'W'+$80 LDY #'W'+$80
JSR PrintSpriteMeta JSR PrintSpriteMeta
LDA tSprite1 + SPRITE_H LDA gSprite1H
LDX #' '+$80 LDX #' '+$80
LDY #'H'+$80 LDY #'H'+$80
JSR PrintSpriteMeta JSR PrintSpriteMeta
@ -1145,6 +1197,9 @@ SetCursorByte
TAX ; push byte TAX ; push byte
LDA cursor_col LDA cursor_col
; X = Byte
; A = Col
PutCursorByteX
CLC CLC
ROR ROR
TAY TAY
@ -1157,6 +1212,9 @@ SetCursorByte
_set_main _set_main
ELSE ELSE
LDY cursor_col LDY cursor_col
; A = Byte
; Y = Column
PutCursorByteX
FIN FIN
STA (GBASL),Y ; Write to AUX or MAIN STA (GBASL),Y ; Write to AUX or MAIN
STA SW_AUXWROFF ; Write MAIN STA SW_AUXWROFF ; Write MAIN
@ -1462,20 +1520,23 @@ sPixelFooter
; === Sprite/Region === ; === Sprite/Region ===
; X,Y ; X,Y
; W,H ; W,H
tSprite1
gSprite1X DB 0 gSprite1X DB 0
gSprite1Y DB 0 gSprite1Y DB 0
gSprite1W DB 0 gSprite1W DB 0
gSprite1H DB 0 gSprite1H DB 0
gSprite1End DW 0 gSprite1End DW 0
gSprite1Len DW 0 gSprite1Len DW 0
tSprite2 gSprite2X DB 0 ; W = 2X - 1X + 1
DB 0, 0 gSprite2Y DB 0 ; H = 2Y - 1Y + 1
DB 0, 0
gSpriteX DB 0 ; temp - for copying
gSpriteY DB 0 gSpriteY DB 0
gSpriteW DB 0 ; temp - for copy gSpriteW DB 0 ; temp - for copying
gSpriteH DB 0 ; temp - for copy gSpriteH DB 0 ; temp - for copying
gSpriteX2 DB 0
gSpriteY2 DB 0
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Keys are searched in reverse order ; Keys are searched in reverse order
@ -1513,8 +1574,8 @@ aKeys
ASC '&' ; _Bit6 Toggle bit 6 ASC '&' ; _Bit6 Toggle bit 6
ASC '*' ; _Bit7 Toggle bit 7 ASC '*' ; _Bit7 Toggle bit 7
ASC ';' ; _SaveSprite ASC ':' ; _SaveSprite :
DB "'" & $3F ; _LoadSprite ASC ';' ; _LoadSprite ;
ASC 'M' ; _ResetRegion ASC 'M' ; _ResetRegion
ASC ' ' ; _MarkRegion Changed from Toggle high bit of byte (bit 7) is useless in DHGR mode ASC ' ' ; _MarkRegion Changed from Toggle high bit of byte (bit 7) is useless in DHGR mode