add byte order hex entry for 6502 addressing
This commit is contained in:
parent
770d666d28
commit
5f1909a25b
101
src/menu.s
101
src/menu.s
|
@ -67,6 +67,7 @@ Menu_DrawRoutinesTbl da Menu_DrawOptionHex ;char
|
|||
da Menu_DrawOptionBool
|
||||
da Menu_DrawOptionBin
|
||||
da Menu_DrawOptionInt
|
||||
da Menu_DrawOptionHexByteOrder
|
||||
Menu_DrawOptionBin iny
|
||||
lda ($F0),y ;get len
|
||||
sta _menuOptionLen
|
||||
|
@ -216,6 +217,22 @@ Menu_DrawOptionHex iny
|
|||
cpy _menuOptionLen
|
||||
bne :prloop
|
||||
rts
|
||||
Menu_DrawOptionHexByteOrder iny
|
||||
lda ($F0),y ;get len
|
||||
sta _menuOptionLen
|
||||
iny
|
||||
lda ($F0),y ;get da
|
||||
sta $F2 ;storez
|
||||
iny
|
||||
lda ($F0),y ;get da
|
||||
sta $F3 ;storez
|
||||
ldy _menuOptionLen ;we start at n-1 and work down to 0
|
||||
:prloop dey
|
||||
lda ($F2),y
|
||||
jsr PRBYTE
|
||||
cpy #0
|
||||
bne :prloop
|
||||
rts
|
||||
|
||||
Menu_DrawOptionAction iny
|
||||
iny
|
||||
|
@ -332,7 +349,11 @@ Menu_GetItemScreenWidth
|
|||
bne :notBool
|
||||
lda #3 ;@todo: we'll use "off"/"on" for now.. revisit?
|
||||
rts ;hmm.. undefined? @TODO!!!
|
||||
:notBool
|
||||
:notBool cpx Menu_TypeHexByteOrder
|
||||
bne :notHexByteOrder
|
||||
asl ;*2 for printing 2 char per byte
|
||||
rts
|
||||
:notHexByteOrder
|
||||
:wtf
|
||||
rts
|
||||
|
||||
|
@ -386,9 +407,10 @@ _menuSelectedY db 0
|
|||
|
||||
* THESE ARE ALL OF THE MENU INPUT TYPES
|
||||
Menu_Inputs
|
||||
Menu_InputTable da Menu_InputChar,Menu_InputHex,Menu_InputAction,Menu_InputList,Menu_InputBool,Menu_InputBin,Menu_InputInt
|
||||
Menu_InputTable da Menu_InputChar,Menu_InputHex,Menu_InputAction,Menu_InputList,Menu_InputBool,Menu_InputBin,Menu_InputInt,Menu_InputHexByteOrder
|
||||
Menu_TypeChar equ #0
|
||||
Menu_TypeHex equ #1
|
||||
Menu_TypeHexByteOrder equ #7
|
||||
Menu_TypeBin equ #5
|
||||
Menu_TypeInt equ #6
|
||||
Menu_TypeAction equ #2
|
||||
|
@ -462,6 +484,32 @@ Menu_InputInt pha
|
|||
jsr GetInt
|
||||
rts
|
||||
|
||||
Menu_InputHexByteOrder pha
|
||||
tay
|
||||
lda ($F0),y
|
||||
tax
|
||||
iny
|
||||
lda ($F0),y
|
||||
tay
|
||||
jsr GoXY
|
||||
pla
|
||||
clc
|
||||
adc #3 ; ->memory size
|
||||
tay
|
||||
lda ($F0),y
|
||||
asl ;*2
|
||||
pha
|
||||
iny
|
||||
lda ($F0),y
|
||||
pha
|
||||
iny
|
||||
lda ($F0),y
|
||||
tay
|
||||
plx
|
||||
pla
|
||||
jsr GetHexByteOrder
|
||||
rts
|
||||
|
||||
Menu_InputHex pha
|
||||
tay
|
||||
lda ($F0),y
|
||||
|
@ -546,7 +594,15 @@ Menu_InputList
|
|||
*** INPUT LIBRARY FOR MENU
|
||||
* Pass desired length in A
|
||||
* x/y= storage area
|
||||
GetHex
|
||||
GetHexByteOrder
|
||||
pha
|
||||
lda #$1 ;1=6502 ordering
|
||||
sta _gethex_byteorder
|
||||
pla
|
||||
bra GetHexStart
|
||||
|
||||
GetHex stz _gethex_byteorder ;0=linear order (01 23 45 67 etc, in memory)
|
||||
GetHexStart
|
||||
sta _gethex_maxlen
|
||||
stx _gethex_resultptr
|
||||
sty _gethex_resultptr+1
|
||||
|
@ -585,6 +641,10 @@ GetHex
|
|||
bcc :badChar
|
||||
cmp #"F"+1
|
||||
bcs :badChar
|
||||
bcc :gotHex
|
||||
***
|
||||
:badChar jmp :input ;jmp out of here
|
||||
***
|
||||
:gotHex
|
||||
sec
|
||||
sbc #"A"-10
|
||||
|
@ -604,11 +664,37 @@ GetHex
|
|||
bra :input
|
||||
:internalmax
|
||||
:passedmax
|
||||
lda _gethex_resultptr
|
||||
lda _gethex_resultptr ;set destination buffer to result memory
|
||||
sta $0
|
||||
lda _gethex_resultptr+1
|
||||
sta $1
|
||||
ldx #0
|
||||
;prep to copy back to result
|
||||
lda _gethex_byteorder
|
||||
beq :linearcopy
|
||||
:byteordercopy ldx #0
|
||||
lda _gethex_maxlen
|
||||
lsr ;/2 ... took a looong time to find this bug
|
||||
tay
|
||||
dey ;we start at n-1 and work down to 0
|
||||
:copyBufferBackwardsByte lda _gethex_buffer,x
|
||||
asl ; move to upper nibble
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta ($0),y ; store
|
||||
inx
|
||||
lda _gethex_buffer,x
|
||||
ora ($0),y
|
||||
sta ($0),y
|
||||
dey
|
||||
inx
|
||||
cpx _gethex_maxlen
|
||||
bcc :copyBufferBackwardsByte
|
||||
rts
|
||||
|
||||
|
||||
|
||||
:linearcopy ldx #0
|
||||
ldy #0
|
||||
:copyBuffer lda _gethex_buffer,x
|
||||
asl ; move to upper nibble
|
||||
|
@ -626,7 +712,7 @@ GetHex
|
|||
bcc :copyBuffer
|
||||
rts
|
||||
|
||||
:badChar jmp :input
|
||||
|
||||
|
||||
_gethex_internalmax equ 8
|
||||
_gethex_resultptr da 0000
|
||||
|
@ -634,6 +720,7 @@ _gethex_maxlen db 1
|
|||
_gethex_current db 0
|
||||
_gethex_buffer ds _gethex_internalmax
|
||||
_gethex_screenx db 0
|
||||
_gethex_byteorder db 0 ;0=linear, 1=6502 address byte order.. Least significant byte first.
|
||||
|
||||
*** INPUT LIBRARY FOR MENU
|
||||
* Pass desired length in A
|
||||
|
@ -860,5 +947,3 @@ BINBCDVARDUMP
|
|||
jsr RDKEY
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
|
12
src/misc.s
12
src/misc.s
|
@ -109,10 +109,18 @@ WaitSCB sta :val+1
|
|||
; the problem is we can get the LAST
|
||||
; horizcnt even/odd right as it changes
|
||||
; and start early or something?
|
||||
|
||||
rts
|
||||
MAXSCB db 0
|
||||
|
||||
Full16 MAC
|
||||
clc
|
||||
xce
|
||||
rep #$30
|
||||
<<<
|
||||
|
||||
ShortMX MAC
|
||||
sep #$30
|
||||
<<<
|
||||
|
||||
PushAll MAC
|
||||
pha
|
||||
|
@ -125,3 +133,5 @@ PopAll MAC
|
|||
plx
|
||||
pla
|
||||
<<<
|
||||
|
||||
|
||||
|
|
33
src/mmt.s
33
src/mmt.s
|
@ -158,7 +158,11 @@ TestInit
|
|||
TestMasterLoop clc
|
||||
xce
|
||||
rep #$10 ;long x/y
|
||||
ldy StartAddr
|
||||
ldx EndAddr
|
||||
stz CurBank
|
||||
lda _updateInterval ;@todo ?
|
||||
sta _updateTick ;this hack makes bank loops consistent. might not be the best thing
|
||||
jsr TestPrintIteration
|
||||
jsr TestPrintErrors ;just to get it drawn
|
||||
:NextBank jsr TestSetState ;sets read/write/both
|
||||
|
@ -1231,11 +1235,11 @@ MainMenuDefs
|
|||
db 01 ; memory size (bytes)
|
||||
da EndBank ; variable storage
|
||||
:StartAddr hex 19,06 ; x,y
|
||||
db Menu_TypeHex ; 1=hex input
|
||||
db Menu_TypeHexByteOrder ; 1=hex input
|
||||
db 02 ; memory size (bytes)
|
||||
da StartAddr ; variable storage
|
||||
:EndAddr hex 20,06 ; x,y
|
||||
db Menu_TypeHex ; 1=hex input
|
||||
db Menu_TypeHexByteOrder ; 1=hex input
|
||||
db 02 ; memory size (bytes)
|
||||
da EndAddr ; variable storage
|
||||
:TestType hex 19,07 ; x,y
|
||||
|
@ -1246,7 +1250,6 @@ MainMenuDefs
|
|||
db Menu_TypeList ; 3=list input
|
||||
db 6 ; max len size (bytes), 3=option list
|
||||
da TestSizeTbl ; params definition & storage
|
||||
|
||||
:HexPattern hex 19,08 ; x,y
|
||||
db Menu_TypeHex ; 3=list input
|
||||
_hexpatternsize db 02 ; max len size (bytes), 3=option list <- can change when 8 bit??
|
||||
|
@ -1302,8 +1305,10 @@ Menu_ItemSelected db 0
|
|||
* ... also disable AdjacentWrite if TwoPass
|
||||
MenuUpdateConfig lda TestSize16Bit
|
||||
bne :is16bit
|
||||
:is8bit jmp MenuSet8Bit
|
||||
:is16bit jmp MenuSet16Bit
|
||||
:is8bit jsr MenuFixMax8
|
||||
jmp MenuSet8Bit
|
||||
:is16bit jsr MenuFixMax16
|
||||
jmp MenuSet16Bit
|
||||
MenuSet16Bit lda #2
|
||||
bra MenuSetBits
|
||||
MenuSet8Bit jsr MenuClearPatterns ;clear leftover chars because strings are shorter now
|
||||
|
@ -1322,12 +1327,29 @@ MenuSetBits sta _hexpatternsize
|
|||
cmp _lastAdjacentWrite
|
||||
beq :done
|
||||
sta _lastAdjacentWrite
|
||||
|
||||
stz TestTwoPass
|
||||
stz _lastTwoPass
|
||||
:done rts
|
||||
_lastTwoPass db 0
|
||||
_lastAdjacentWrite db 0
|
||||
|
||||
MenuFixMax16 Full16
|
||||
lda EndAddr
|
||||
cmp #$FFFF
|
||||
bne :noneed
|
||||
dec EndAddr
|
||||
:noneed ShortMX
|
||||
rts
|
||||
|
||||
MenuFixMax8 Full16
|
||||
lda EndAddr
|
||||
cmp #$FFFE
|
||||
bne :noneed
|
||||
inc EndAddr
|
||||
:noneed ShortMX
|
||||
rts
|
||||
|
||||
* hack to allow for smaller portion of screen to update
|
||||
MenuClearPatterns PRINTXY #$17;#$8;_clearstring
|
||||
PRINTXY #$17;#$9;_clearstring
|
||||
|
@ -1540,3 +1562,4 @@ BankExpansionHighest ds 1
|
|||
BankMap ds 256 ;page-align maps just to make them easier to see
|
||||
_stash ds 256
|
||||
ds \
|
||||
|
||||
|
|
Loading…
Reference in New Issue