charset organization improved + doc

This commit is contained in:
giomba 2020-04-06 18:44:54 +02:00
parent c33178ceac
commit fcdea3cc08
9 changed files with 1010 additions and 1009 deletions

View File

@ -12,8 +12,8 @@ You can also make it output useful extra info with:
$ make debug $ make debug
``` ```
## Developer docs
## Memory map ### Memory map
Address | PRG | Description Address | PRG | Description
----------------------|-------|------------ ----------------------|-------|------------
```$0000 - $0001``` | no | hardware ```$0000 - $0001``` | no | hardware
@ -30,3 +30,12 @@ Address | PRG | Description
```$D000 - $DFFF``` | no | I/O ```$D000 - $DFFF``` | no | I/O
```$E000 - $FFFF``` | no | Kernal ```$E000 - $FFFF``` | no | Kernal
### Custom charset
Index | Description
----------------|-------------
```$00 - $1F``` | A-Z (space first)
```$20 - $3F``` | A-Z, reversed (space first)
```$40 - $4F``` | hex digits
```$50 - $5F``` | hex digits, reversed
```$60 - ``` | game tiles

View File

@ -7,10 +7,10 @@ x x
x x x x
x x x x
x x x x
x x ........................................
x x ........................................
x x ........................................
x x ........................................
x x x x
x x x x
x x x x

View File

@ -252,7 +252,7 @@ foodOK:
ldy #0 ldy #0
jsr calcTileMem ; calc food address in memory jsr calcTileMem ; calc food address in memory
lda (tileMem),y ; check if memory is empty lda (tileMem),y ; check if memory is empty
cmp #$20 ; is there a space? cmp #$00 ; is there a space?
bne genFood ; if not, must generate another number bne genFood ; if not, must generate another number
lda #FOOD_TILE ; else, just put that fucking piece of food there lda #FOOD_TILE ; else, just put that fucking piece of food there
sta (tileMem),y sta (tileMem),y
@ -312,7 +312,7 @@ checkEndWallHit:
lda listY,x lda listY,x
sta calcTileY sta calcTileY
jsr calcTileMem jsr calcTileMem
lda #$20 ; just put a space to erase snake tail tile lda #$00 ; just put a space to erase snake tail tile
sta (tileMem),y sta (tileMem),y
; lda #WALL_COLOR ; lda #WALL_COLOR

View File

@ -4,10 +4,10 @@ gamereset:
; Turn MultiColor mode on ; Turn MultiColor mode on
jsr multicolorOn jsr multicolorOn
; Upper bar -- fill with reversed spaces, color yellow ; Upper bar -- fill with spaces, color yellow
ldx #39 ldx #39
upperbarLoop: upperbarLoop:
lda #$a0 ; reversed color space lda #$0
sta $400,x sta $400,x
lda #7 lda #7
sta $d800,x sta $d800,x

View File

@ -32,13 +32,13 @@ ST_PAUSE = 255
SCREEN_W = 40 SCREEN_W = 40
SCREEN_H = 24 SCREEN_H = 24
; Snake features ; Snake features
SNAKE_TILE = 81 SNAKE_TILE = $60
SNAKE_COLOR = 13 SNAKE_COLOR = 13
; Food features ; Food features
FOOD_TILE = 90 FOOD_TILE = $61
FOOD_COLOR = 10 FOOD_COLOR = 10
; Wall features ; Wall features
WALL_TILE = 91 WALL_TILE = $62
; Strings ; Strings
; ---------------------------------------------------------------------- ; ----------------------------------------------------------------------

View File

@ -5,7 +5,7 @@ introreset:
; Clear screen ; Clear screen
ldx #$ff ldx #$ff
lda #$20 lda #$00
introresetCLS: introresetCLS:
sta $400,x sta $400,x
sta $500,x sta $500,x

View File

@ -58,33 +58,16 @@ printByte:
lsr lsr
lsr lsr
lsr lsr
jsr printDigit ora #$40 ; add 64 (see font)
sta $400,y ; print msb char sta $400,y ; print msb char
txa ; Take least significant nibble (use previous copy) txa ; Take least significant nibble (use previous copy)
and #$0f and #$0f
jsr printDigit ora #$40 ; add 64 (see font)
sta $401,y ; print lsb char sta $401,y ; print lsb char
rts rts
; Transform a base-36 digit into a Commodore screen code
; Leave input digit in accumulator; returns output screen code in accumulator
printDigit:
cmp #10
bcs printDigitL ; if it is not a decimal digit, then go to printDigitL
clc ; it is a decimal digit! Just add `0` (48)
adc #48
ora #$80 ; reverse color
rts
printDigitL: ; it is not a decimal digit, then...
sec
sbc #10 ; take away 10
clc
adc #1 ; add 1, so you obtain something in [A-F]
ora #$80 ; reverse color
rts
; Print null-terminated string on status bar ; Print null-terminated string on status bar
; address of string is given in input using memory location printStatusString ; address of string is given in input using memory location printStatusString
printStatus: printStatus:
@ -94,11 +77,10 @@ printStatusLoop:
beq printStatusEnd beq printStatusEnd
cmp #$20 cmp #$20
bne printStatusSkipSpace bne printStatusSkipSpace
lda #$60 lda #$40 ; space + $40
printStatusSkipSpace: printStatusSkipSpace:
sec sec
sbc #$40 ; convert from standard ASCII to Commodore screen code sbc #$40 ; convert from standard ASCII to Commodore screen code
ora #$80 ; reverse color
sta $413,y sta $413,y
iny iny
jmp printStatusLoop jmp printStatusLoop
@ -114,6 +96,11 @@ printIntro:
printIntroLoop: printIntroLoop:
lda (printIntroString),y ; get char from string lda (printIntroString),y ; get char from string
beq printIntroEnd ; if zero, then end (string must be null-terminated) beq printIntroEnd ; if zero, then end (string must be null-terminated)
cmp #$20 ; is space?
bne printIntroCheckPunct
lda #$0
jmp printIntroEndCheck
printIntroCheckPunct:
cmp #$40 ; is char greater or equal to #$40 = #64 = `@' ? cmp #$40 ; is char greater or equal to #$40 = #64 = `@' ?
bcc printIntroEndCheck ; if not, it is less, thus it must be bcc printIntroEndCheck ; if not, it is less, thus it must be
; a full stop, comma, colon or something ; a full stop, comma, colon or something
@ -122,6 +109,7 @@ printIntroLoop:
; otherwise, it is greater than `@`, so must ; otherwise, it is greater than `@`, so must
; subtract 64 because CBM and its encodings ; subtract 64 because CBM and its encodings
; are simply a big shit ; are simply a big shit
; TODO -- actually must be fixed with new charset
sec sec
sbc #$40 sbc #$40

File diff suppressed because it is too large Load Diff

View File

@ -7,11 +7,11 @@ void flush(char last, int count) {
char tile, color; char tile, color;
switch(last) { switch(last) {
case 'x': case 'x':
tile = (char)91; color = (char)0x8; break; tile = (char)0x62; color = (char)0x8; break;
case 'f': case 'f':
tile = (char)90; color = (char)0xa; break; tile = (char)0x61; color = (char)0xa; break;
default: default:
tile = (char)32; break; tile = (char)0x00; break;
} }
cout << tile << color << (char)count; cout << tile << color << (char)count;
} }