Here's a few suggestions. I've had a bit of a test using Chuckie Egg as an example to disassemble.
1. The inclusion of '|' seems superfluous here:
Code: Select all
lda #osbyte_clear_escape ; '|' ; 29d8: a9 7c
jsr osbyte ; 29da: 20 f4 ff
where the constant has already been identified.
2. Replace immediate constants #$00 to #$09 with #0 to #9 for readability. The 9 limit is fairly arbitrary, but there are a lot of small constant values typically and it scans more easily (for me at least).
3. Handle strings with the first byte actually being the length (maybe this is already possible with hooks?)
4. Categorise an address / range as a 'vdu string' (somehow), then annotate the VDU control codes with explanatory text (also note decimal numbers), e.g.:
Code: Select all
.string_enteryourname
EQUB string_enteryourname_end - string_enteryourname_start
.string_enteryourname_start
EQUB 24 ;
EQUW 0, 0, 1279, 892 ; Set graphics window to 0,0,1279,892
EQUB 16 ; CLG
EQUB 26 ; Restore default windows
EQUB 18, 0, 1 ; GCOL 0,1
EQUB 25, 4 ;
EQUW 160, 160 ; MOVE 160,160
EQUS "ENTER YOUR NAME" ;
EQUB 25, 4 ;
EQUW 384, 100 ; MOVE 384,100
EQUB 18, 0, 2 ; GCOL 0,2
EQUS "Player " ;
.string_enteryourname_end
5. The ability to show some bytes/words/dwords in a table (i.e. each line having a set number of bytes / words / dwords). Then additionally allow binary data to be displayed (often useful for sprite data), e.g. The large G in 'CHUCKIE EGG' banner:
Code: Select all
.sprite_bigg
EQUB %00000011, %10000000
EQUB %00001111, %11100000
EQUB %00011111, %11110000
EQUB %00011111, %11111000
EQUB %00111111, %11111000
EQUB %00111111, %11111100
EQUB %01111111, %11111100
EQUB %01111111, %11111100
EQUB %01111110, %01111100
EQUB %01111100, %00111000
EQUB %11111000, %00011000
EQUB %11111000, %00000000
EQUB %11110000, %00000000
EQUB %11110000, %00000000
EQUB %11110000, %00000000
EQUB %11110000, %00000000
EQUB %11110000, %11111000
EQUB %11110000, %11111000
EQUB %11111000, %11111100
EQUB %11111000, %01111100
EQUB %01111100, %00111100
EQUB %01111110, %00111100
EQUB %01111111, %01111100
EQUB %01111111, %11111100
EQUB %00111111, %11111100
EQUB %00111111, %11111100
EQUB %00011111, %11111100
EQUB %00011111, %11111000
EQUB %00001111, %11111000
EQUB %00000011, %11110000
I know Acme can also do dots and hashes which looks nice too e.g.: !byte %......##, %####....
(not sure if BeebAsm can?)
6. Add a newline before !pseudopc and also after the terminating '}'
7. It would be fun if this: label(0x193f, "+") worked where + is a local label. But it looks like the + as the label isn't included in the output?
8.Identify internal/inkey key numbers, e.g. instead of:
Code: Select all
ldx #$ab ; 1a3b: a2 ab
ldy #$ff ; 1a3d: a0 ff
lda #osbyte_inkey ; 1a3f: a9 81
jsr osbyte ; 1a41: 20 f4 ff
This:
Code: Select all
ldx #inkey_key_H ; 1a3b: a2 ab
ldy #$ff ; 1a3d: a0 ff
lda #osbyte_inkey ; 1a3f: a9 81
jsr osbyte ; 1a41: 20 f4 ff