Created
August 17, 2024 17:34
-
-
Save taylorza/f37c4eb2fb344ee2a8df5b9957b36cd0 to your computer and use it in GitHub Desktop.
ZX Spectrum Next ISO Demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION | |
DEVICE ZXSPECTRUMNEXT | |
CSPECTMAP "isodemo.map" | |
org $8000 | |
ACTIVE_16K_BANK = 9 | |
SHADOW_16K_BANK = 12 | |
ACTIVE_8K_BANK = ACTIVE_16K_BANK*2 | |
SHADOW_8K_BANK = SHADOW_16K_BANK*2 | |
TILE_SIZE = 16 | |
HALF_TILE = TILE_SIZE/2 | |
MAP_WIDTH = 16 | |
MAP_HEIGHT = 16 | |
PLAYER_SPEED = 3 | |
main: | |
ei | |
nextreg 7, 3 | |
// Enable layer 2 | |
ld bc, $123b | |
ld a, 2 | |
out (c), a | |
// Setup initial layer 2 bank | |
nextreg $12, ACTIVE_16K_BANK | |
nextreg $56, ACTIVE_8K_BANK | |
nextreg $14, $e3 | |
xor a | |
out (254), a | |
call flipScreen | |
call cls | |
call flipScreen | |
call cls | |
loop | |
ld hl, (playerPos) | |
call cartToIdx | |
ld (playerIdx), a | |
call cls | |
call drawMap | |
call flipScreen | |
in a, ($1f) | |
rra | |
call c, moveRight | |
rra | |
call c, moveLeft | |
rra | |
call c, moveDown | |
rra | |
call c, moveUp | |
jp loop | |
jr $ ; Loop forever! | |
moveRight | |
ld hl, playerX | |
ex af, af | |
ld a, (hl) | |
cp (MAP_WIDTH * HALF_TILE)-4 | |
jr nc, .done | |
add PLAYER_SPEED | |
ld (hl), a | |
.done | |
ex af, af | |
ret | |
moveLeft | |
ld hl, playerX | |
ex af, af | |
ld a, (hl) | |
cp TILE_SIZE | |
jr c, .done | |
add -PLAYER_SPEED | |
ld (hl), a | |
.done | |
ex af, af | |
ret | |
moveDown | |
ld hl, playerY | |
ex af, af | |
ld a, (hl) | |
cp (MAP_WIDTH * HALF_TILE)-12 | |
jr nc, .done | |
add PLAYER_SPEED | |
ld (hl), a | |
.done | |
ex af, af | |
ret | |
moveUp | |
ld hl, playerY | |
ex af, af | |
ld a, (hl) | |
cp TILE_SIZE | |
jr c, .done | |
add -PLAYER_SPEED | |
ld (hl), a | |
.done | |
ex af, af | |
ret | |
cls | |
ld hl, shadow_bank | |
ld a, (hl) | |
exx | |
ld b, 3 | |
.clsbank | |
exx | |
nextreg $56, a | |
inc a | |
nextreg $57, a | |
ex af, af | |
xor a | |
ld hl, $c000 | |
ld bc, $4000 | |
call fillMemory | |
ex af, af | |
inc a | |
exx | |
djnz .clsbank | |
exx | |
ret | |
flipScreen | |
ld hl, visible_bank ; Point to visible_bank | |
ld b, (hl) ; B = current visible bank | |
inc hl ; Point to shadow_bank | |
ld a, (hl) ; A = current shadow bank | |
ld (visible_bank), a ; Switch visible bank | |
srl a ; Calculate 16K Bank number | |
halt ; Wait for refresh | |
nextreg $12, a ; Switch to new visible bank | |
ld a, b ; A = previous visible bank | |
ld (shadow_bank), a ; Switch shadow bank | |
ret | |
;------------------------------------------------------------------------------ | |
; drawMap - Draws the isometric map | |
drawMap | |
ld bc, isoCoordTbl | |
ld de, map | |
; Store loop counter in BC' | |
exx ; Switch to secondary registers | |
ld bc, MAP_WIDTH * MAP_HEIGHT | |
xor a | |
ld (tileIdx), a | |
.drawTile | |
exx ; Switch to primary registers | |
ld a, (de) ; Load tile id from map | |
add a, a | |
ld hl, tileTbl | |
add hl, a ; HL = Tile pointer | |
ld a, (hl) ; HL = *HL | |
inc hl | |
ld h, (hl) | |
ld l, a | |
push hl:push de:push bc | |
call drawIsoTile | |
ld hl, playerIdx | |
ld a, (tileIdx) | |
cp (hl) | |
pop bc:pop de:pop hl | |
jr nz, .continue | |
push hl:push de:push bc | |
call drawIsoPlayer | |
pop bc:pop de:pop hl | |
.continue | |
ld a, (tileIdx) | |
inc a | |
ld (tileIdx), a ; Update tile index | |
inc bc:inc bc ; Move to next iso coordinate | |
inc de ; Move to next map cell | |
; Decrement and check loop counter in secondary registers | |
exx ; switch to secondary registers | |
dec bc | |
ld a, c | |
or b | |
jp nz, .drawTile | |
exx ; switch to primary registers | |
ret | |
;------------------------------------------------------------------------------ | |
; drawIsoTile - Draws an isometric tile | |
; Input | |
; BC - Iso Coordinate entry | |
; HL - Pointer to tile data | |
drawIsoTile | |
; Load coordinate from table in BC to into DE | |
ld a, (bc) | |
ld e, a ; E - isoX | |
inc bc | |
ld a, (bc) | |
inc hl ; Point to tile height | |
sub (hl) ; Offset isoY by the tile height | |
ld d, a ; D - isoY | |
ld c, (hl) ; load tile height | |
inc hl ; move to first tile pixel | |
; D,E - isoY, isoX | |
; HL - tile data | |
; C - tile height | |
.nextrow | |
; Set bank for the row | |
push de ; Save iso coordinate | |
ld a, d | |
and %11100000 ; Mask off the relative bank | |
rlca ; Shift bank to first 3 bits | |
rlca | |
rlca | |
exx | |
ld hl, shadow_bank | |
add (hl) | |
exx | |
nextreg $56, a ; Set the bank in slot 6 ($C000) | |
ld a, d | |
and %00011111 ; Remove the relative bank | |
or $c0 ; Add $c0 to A | |
ld d, a ; Load DE with the $c000 relative address | |
; Render tile row | |
push bc | |
xor a ; A = Value not to transfer | |
ld bc, TILE_SIZE | |
ldirx ; BC x (*HL != A ? *DE++ = *HL++ : DE++, HL++) | |
pop bc | |
pop de ; Restore last iso coordinate | |
inc d ; Move to next screen row | |
dec c ; Decrement the remaining tile rows | |
jp nz, .nextrow | |
ret | |
;------------------------------------------------------------------------------ | |
; drawIsoPlayer - Draws an isometric player | |
; Input | |
; BC - Iso Coordinate entry | |
; HL - Pointer to tile data | |
drawIsoPlayer | |
; Load coordinate from table in BC to into DE | |
ld a, (bc) | |
ld e, a ; E - isoX | |
inc bc | |
ld a, (bc) | |
sub (hl) ; Offset isoY by current tile base level | |
ld d, a ; D - isoY | |
; Calculate sub cell position | |
ld hl, (playerPos) | |
ld a, h ; Mask bottom 3 bits of x | |
and $7 | |
ld h, a | |
ld a, l ; Mask bottom 3 bits of y | |
and $7 | |
ld l, a | |
call cartToIso ; Convert sub movement to iso offset | |
ld a, d ; Add offset to isoY | |
add h | |
ld d, a | |
ld a, e ; Add offset to isoX | |
add l | |
ld e, a | |
; Offset isoY by the player height | |
ld hl, player | |
ld c, (hl) ; load player height | |
ld a, d ; load isoY into A | |
sub c ; subtract player height | |
ld d, a | |
inc hl ; move to first tile pixel | |
; D,E - isoY, isoX | |
; HL - player data | |
; C - player height | |
.nextrow | |
; Set bank for the row | |
push de ; Save iso coordinate | |
ld a, d | |
and %11100000 ; Mask off the relative bank | |
rlca ; Shift bank to first 3 bits | |
rlca | |
rlca | |
exx | |
ld hl, shadow_bank | |
add (hl) | |
exx | |
nextreg $56, a ; Set the bank in slot 6 ($C000) | |
ld a, d | |
and %00011111 ; Remove the relative bank | |
or $c0 ; Add $c0 to A | |
ld d, a ; Load DE with the $c000 relative address | |
; Render player row | |
push bc | |
xor a ; A = Value not to transfer | |
ld bc, TILE_SIZE | |
ldirx ; BC x (*HL != A ? *DE++ = *HL++ : DE++, HL++) | |
pop bc | |
pop de ; Restore last iso coordinate | |
inc d ; Move to next screen row | |
dec c ; Decrement the remaining tile rows | |
jp nz, .nextrow | |
ret | |
;------------------------------------------------------------------------------- | |
; cartToIdx - convert cartesian coordinate to map index | |
; Input | |
; H = y-coordinate | |
; L = x-coordinate | |
; Output | |
; A = index into map | |
cartToIdx | |
ld a, h | |
rra:rra:rra | |
and %00011111 ; tileY = Y/8 (bottom 3 bits are sub cell) | |
ld d, a | |
ld e, MAP_WIDTH | |
mul d,e ; rowIdx = tileY * MAP_WIDTH | |
ld a, l | |
rra:rra:rra | |
and %00011111 ; tileX = X/8 (botton 3 bits are sub cell) | |
add a, e ; idx = rowIdx + tileX | |
ret | |
;------------------------------------------------------------------------------- | |
; cartToIso - convert cartesian coordinate to iso Coordinate | |
; Input | |
; H = y-coordinate | |
; L = x-coordinate | |
; Output | |
; H = isoY | |
; L = isoX | |
cartToIso | |
push de | |
; isoX = x-y | |
ld a, l | |
sub h | |
ld e, a | |
; isoY = (x+y)/2 | |
ld a, l | |
add h | |
srl a | |
ld d, a | |
ex de, hl | |
pop de | |
ret | |
;------------------------------------------------------------------------------- | |
; fillMemory - Fill memory with byte using DMA | |
; Input | |
; A - Fill byte | |
; HL - Destination address | |
; BC - Fill count | |
fillMemory | |
ld (.fillByte), a | |
ld (.dmaLen), bc | |
ld (.dmaDst), hl | |
ld hl, .dmaProgram | |
ld bc, ((.dmaProgSize << 8) & 0xff00) | $6b | |
otir | |
ret | |
.fillByte db 0 | |
.dmaProgram | |
db %10000011 ; WR6: disable DMA | |
db %01111101 ; WR0: address+length port A, A->B | |
.dmaSrc | |
dw .fillByte ; WR0: Address | |
.dmaLen | |
dw 0 ; WR0: Length | |
db %00100100 ; WR1: A-Fixed, A=Memory | |
db %00010000 ; WR2: B-Incr, B=Memory | |
db %10101101 ; WR4 - continuous address port B | |
.dmaDst | |
dw 0 ; WR4: Address | |
db %10000010 ; WR5: Stop on end of block | |
db %11001111 ; WR6: Load address into DMA | |
db %10000111 ; WR6: Enable DMA | |
.dmaProgSize = $-.dmaProgram | |
tileIdx db 0 ; Current tile index | |
playerPos ; Player cartesian coordinate | |
playerX db 20 | |
playerY db 20 | |
playerIdx db 0 ; Player location index | |
visible_bank db ACTIVE_8K_BANK | |
shadow_bank db SHADOW_8K_BANK | |
map | |
db 2,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3 | |
db 2,0,0,0,7,4,4,4,4,4,7,4,4,4,4,4 | |
db 1,0,0,0,7,4,4,4,4,4,7,4,4,4,4,4 | |
db 3,0,0,0,7,4,4,4,4,4,7,4,4,4,4,4 | |
db 3,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7 | |
db 3,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0 | |
db 3,4,4,4,4,5,4,4,4,4,4,5,4,0,0,0 | |
db 3,4,4,4,7,4,4,4,4,4,6,4,4,0,0,0 | |
db 3,4,5,4,7,4,4,4,4,4,4,4,4,0,4,4 | |
db 3,4,4,4,7,9,8,8,8,9,4,4,4,0,4,4 | |
db 3,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7 | |
db 3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 | |
db 3,4,4,4,4,5,4,4,4,4,4,5,4,4,4,4 | |
db 3,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4 | |
db 3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 | |
db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 | |
; Tile index table | |
tileTbl | |
dw floor ; 0 | |
dw wall ; 1 | |
dw wall2 ; 2 | |
dw wall3 ; 3 | |
dw ground ; 4 | |
dw grass ; 5 | |
dw rock ; 6 | |
dw stone ; 7 | |
dw portal ; 8 | |
dw post ; 9 | |
floor: db 8, 8 | |
db $0, $0, $0, $0, $0, $0, $14, $14, $14, $14, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $14, $14, $78, $78, $78, $78, $14, $14, $0, $0, $0, $0 | |
db $0, $0, $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14, $0, $0 | |
db $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14 | |
db $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14 | |
db $0, $0, $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14, $0, $0 | |
db $0, $0, $0, $0, $14, $14, $78, $78, $78, $78, $14, $14, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $14, $14, $14, $14, $0, $0, $0, $0, $0, $0 | |
wall: db 16, 16 | |
db $0, $0, $0, $0, $0, $0, $84, $84, $84, $84, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $84, $84, $e4, $e4, $e4, $e4, $84, $84, $0, $0, $0, $0 | |
db $0, $0, $84, $84, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $84, $84, $0, $0 | |
db $84, $84, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $84, $84 | |
db $84, $84, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $84, $84 | |
db $84, $c4, $84, $84, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $e4, $84, $84, $a4, $84 | |
db $84, $c4, $c4, $c4, $84, $84, $e4, $e4, $e4, $e4, $84, $84, $a4, $a4, $a4, $84 | |
db $84, $c4, $c4, $c4, $c4, $c4, $84, $84, $84, $84, $a4, $a4, $a4, $a4, $a4, $84 | |
db $84, $c4, $c4, $c4, $c4, $c4, $c4, $84, $84, $a4, $a4, $a4, $a4, $a4, $a4, $84 | |
db $84, $c4, $c4, $c4, $c4, $c4, $c4, $84, $84, $a4, $a4, $a4, $a4, $a4, $a4, $84 | |
db $84, $c4, $c4, $c4, $c4, $c4, $c4, $84, $84, $a4, $a4, $a4, $a4, $a4, $a4, $84 | |
db $84, $c4, $c4, $c4, $c4, $c4, $c4, $84, $84, $a4, $a4, $a4, $a4, $a4, $a4, $84 | |
db $84, $84, $c4, $c4, $c4, $c4, $c4, $84, $84, $a4, $a4, $a4, $a4, $a4, $84, $84 | |
db $0, $0, $84, $84, $c4, $c4, $c4, $84, $84, $a4, $a4, $a4, $84, $84, $0, $0 | |
db $0, $0, $0, $0, $84, $84, $c4, $84, $84, $a4, $84, $84, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $84, $84, $84, $84, $0, $0, $0, $0, $0, $0 | |
wall2: | |
db 24, 24 | |
db $0, $0, $0, $0, $0, $0, $5, $5, $5, $5, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $5, $5, $f, $f, $f, $f, $5, $5, $0, $0, $0, $0 | |
db $0, $0, $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5, $0, $0 | |
db $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5 | |
db $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5 | |
db $5, $7, $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5, $6, $5 | |
db $5, $7, $7, $7, $5, $5, $f, $f, $f, $f, $5, $5, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $5, $5, $5, $5, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $5, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $5, $5 | |
db $0, $0, $5, $5, $7, $7, $7, $5, $5, $6, $6, $6, $5, $5, $0, $0 | |
db $0, $0, $0, $0, $5, $5, $7, $5, $5, $6, $5, $5, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $5, $5, $5, $5, $0, $0, $0, $0, $0, $0 | |
wall3 db 16, 16 | |
db $0, $0, $0, $0, $0, $0, $50, $91, $91, $50, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $50, $91, $91, $91, $91, $91, $91, $50, $0, $0, $0, $0 | |
db $0, $0, $50, $91, $91, $91, $91, $91, $50, $91, $91, $91, $91, $50, $0, $0 | |
db $50, $91, $91, $91, $91, $91, $50, $91, $91, $91, $50, $50, $91, $91, $91, $50 | |
db $28, $91, $91, $91, $91, $91, $91, $91, $91, $50, $91, $91, $91, $91, $b5, $24 | |
db $28, $28, $28, $91, $91, $91, $91, $91, $91, $91, $91, $91, $b5, $2c, $2c, $24 | |
db $28, $28, $28, $28, $28, $91, $91, $91, $91, $91, $b5, $2c, $50, $2c, $50, $24 | |
db $2c, $28, $28, $28, $28, $28, $28, $91, $b5, $2c, $2c, $2c, $50, $2c, $2c, $24 | |
db $48, $28, $28, $28, $28, $28, $2c, $28, $50, $2c, $50, $2c, $2c, $2c, $2c, $24 | |
db $48, $48, $48, $48, $28, $28, $28, $28, $2c, $2c, $2c, $2c, $48, $6d, $6d, $24 | |
db $48, $48, $48, $48, $48, $48, $28, $28, $50, $48, $6d, $8d, $6d, $6d, $6d, $24 | |
db $48, $48, $48, $48, $6d, $48, $48, $28, $2c, $6d, $8d, $6d, $8d, $6d, $8d, $24 | |
db $0, $24, $48, $48, $48, $48, $48, $48, $6d, $6d, $6d, $6d, $6d, $6d, $24, $0 | |
db $0, $0, $0, $24, $48, $48, $48, $48, $6d, $6d, $6d, $6d, $24, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $24, $48, $48, $6d, $6d, $24, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $0, $24, $24, $0, $0, $0, $0, $0, $0, $0 | |
ground db 12, 12 | |
db $0, $0, $0, $0, $0, $0, $d1, $d1, $ad, $44, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $d1, $69, $20, $69, $ad, $69, $44, $d1, $69, $69, $0, $0, $0, $0 | |
db $0, $d1, $d1, $69, $69, $44, $ad, $d1, $ad, $69, $69, $44, $69, $69, $0, $0 | |
db $d1, $ad, $69, $44, $d1, $69, $20, $69, $20, $69, $d1, $ad, $d1, $d1, $69, $20 | |
db $69, $44, $44, $d1, $d1, $69, $44, $ad, $69, $69, $44, $44, $69, $69, $20, $20 | |
db $44, $20, $69, $ad, $44, $ad, $d1, $d1, $d1, $ad, $69, $69, $44, $44, $20, $20 | |
db $69, $20, $69, $69, $20, $d1, $d1, $ad, $ad, $69, $44, $20, $20, $20, $20, $20 | |
db $69, $20, $69, $44, $44, $69, $69, $ad, $69, $44, $44, $20, $20, $20, $20, $20 | |
db $0, $20, $69, $69, $44, $44, $44, $20, $20, $20, $20, $20, $20, $20, $20, $0 | |
db $0, $0, $0, $20, $44, $69, $44, $20, $20, $20, $20, $20, $20, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $44, $69, $44, $20, $20, $20, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $0, $20, $20, $0, $0, $0, $0, $0, $0, $0 | |
grass db 14, 14 | |
db $0, $0, $0, $0, $0, $0, $0, $0, $75, $50, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $75, $0, $0, $75, $75, $0, $50, $75, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $75, $50, $0, $50, $50, $b9, $50, $50, $50, $75, $0, $0, $0, $0 | |
db $0, $0, $50, $50, $b9, $4, $b9, $b9, $75, $4, $50, $b9, $28, $75, $50, $0 | |
db $75, $50, $b9, $4, $28, $b9, $75, $50, $50, $b9, $75, $28, $75, $75, $50, $0 | |
db $50, $28, $28, $b9, $75, $b9, $50, $4, $4, $75, $4, $4, $28, $50, $50, $50 | |
db $28, $50, $28, $4, $4, $75, $75, $28, $28, $75, $75, $50, $75, $75, $50, $4 | |
db $75, $50, $75, $50, $b9, $b9, $4, $4, $b9, $4, $28, $50, $50, $75, $4, $4 | |
db $28, $28, $28, $75, $50, $50, $50, $50, $b9, $28, $50, $28, $4, $50, $4, $1 | |
db $4, $28, $28, $4, $75, $28, $28, $75, $75, $4, $50, $50, $4, $4, $1, $1 | |
db $0, $4, $4, $4, $28, $4, $28, $4, $75, $4, $4, $4, $1, $1, $1, $0 | |
db $0, $0, $0, $4, $28, $4, $28, $4, $1, $4, $4, $4, $1, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $4, $4, $4, $1, $4, $1, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $0, $4, $1, $0, $0, $0, $0, $0, $0, $0 | |
rock db 15, 15 | |
db $0, $0, $0, $0, $0, $0, $0, $b6, $b6, $92, $4d, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $4d, $4d, $b6, $92, $92, $4d, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $b6, $4d, $29, $b6, $92, $92, $92, $4d, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $b6, $4d, $b6, $b6, $92, $92, $92, $4d, $0, $0, $0, $0 | |
db $0, $0, $0, $b6, $92, $29, $b6, $b6, $92, $92, $92, $24, $0, $0, $0, $0 | |
db $0, $0, $0, $b6, $92, $92, $92, $4d, $92, $92, $4d, $29, $0, $0, $0, $0 | |
db $0, $0, $4d, $b6, $92, $92, $24, $4d, $4d, $4d, $4d, $24, $29, $0, $0, $0 | |
db $0, $0, $b6, $92, $92, $92, $4d, $24, $4d, $4d, $4, $29, $29, $4, $0, $0 | |
db $0, $0, $4d, $4d, $92, $4d, $92, $24, $4, $4, $29, $4d, $29, $4, $0, $0 | |
db $0, $0, $29, $4d, $4d, $24, $29, $24, $4d, $29, $4d, $4d, $29, $4, $0, $0 | |
db $0, $0, $4, $29, $29, $4d, $4d, $29, $4d, $4d, $4d, $4d, $4, $0, $0, $0 | |
db $0, $0, $92, $24, $29, $4d, $29, $1, $29, $29, $4d, $24, $29, $1, $0, $0 | |
db $0, $0, $4d, $92, $29, $29, $1, $24, $1, $24, $29, $29, $29, $24, $0, $0 | |
db $0, $0, $0, $4d, $29, $4d, $4d, $4d, $1, $29, $29, $29, $24, $0, $0, $0 | |
db $0, $0, $0, $0, $29, $4d, $4d, $1, $0, $24, $29, $0, $0, $0, $0, $0 | |
stone db 13, 13 | |
db $0, $0, $0, $0, $0, $0, $0, $92, $92, $0, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $92, $92, $92, $92, $0, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $92, $92, $29, $4d, $4d, $4d, $4d, $92, $92, $0, $0, $0, $0 | |
db $0, $0, $4d, $b6, $92, $4d, $92, $92, $4d, $4d, $b6, $92, $4d, $92, $92, $0 | |
db $92, $b6, $92, $29, $29, $b6, $92, $92, $4d, $29, $24, $29, $92, $92, $92, $4d | |
db $4d, $b6, $92, $92, $92, $24, $4d, $4d, $92, $92, $92, $92, $29, $b6, $4d, $29 | |
db $29, $4d, $4d, $92, $92, $24, $92, $92, $b6, $92, $92, $92, $4d, $24, $29, $29 | |
db $29, $29, $4d, $4d, $4d, $b6, $92, $92, $4d, $4d, $29, $29, $29, $4, $24, $24 | |
db $4d, $4d, $24, $29, $29, $29, $4d, $92, $4d, $24, $29, $29, $1, $29, $29, $1 | |
db $0, $29, $24, $4d, $4d, $29, $4d, $4d, $29, $24, $29, $29, $1, $24, $1, $0 | |
db $0, $0, $0, $24, $29, $29, $24, $29, $1, $29, $29, $24, $1, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $24, $4d, $29, $24, $24, $1, $0, $0, $0, $0, $0 | |
db $0, $0, $0, $0, $0, $0, $0, $29, $1, $0, $0, $0, $0, $0, $0, $0 | |
portal db 8, 48 | |
db $00, $00, $00, $00, $00, $00, $6, $6, $6, $6, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $6, $6, $f, $f, $f, $f, $6, $6, $00, $00, $00, $00 | |
db $00, $00, $6, $6, $f, $f, $f, $f, $f, $f, $f, $f, $6, $6, $00, $00 | |
db $6, $6, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $6, $6 | |
db $6, $6, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $6, $6 | |
db $00, $00, $6, $6, $f, $f, $f, $f, $f, $f, $f, $f, $6, $6, $00, $00 | |
db $00, $00, $00, $00, $6, $6, $f, $f, $f, $f, $6, $6, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $6, $6, $6, $6, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $14, $14, $14, $14, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $14, $14, $78, $78, $78, $78, $14, $14, $00, $00, $00, $00 | |
db $00, $00, $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14, $00, $00 | |
db $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14 | |
db $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14 | |
db $00, $00, $14, $14, $78, $78, $78, $78, $78, $78, $78, $78, $14, $14, $00, $00 | |
db $00, $00, $00, $00, $14, $14, $78, $78, $78, $78, $14, $14, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $14, $14, $14, $14, $00, $00, $00, $00, $00, $00 | |
post db 48, 48 | |
db $00, $00, $00, $00, $00, $00, $5, $5, $5, $5, $00, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $5, $5, $f, $f, $f, $f, $5, $5, $00, $00, $00, $00 | |
db $00, $00, $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5, $00, $00 | |
db $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5 | |
db $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5 | |
db $5, $7, $5, $5, $f, $f, $f, $f, $f, $f, $f, $f, $5, $5, $6, $5 | |
db $5, $7, $7, $7, $5, $5, $f, $f, $f, $f, $5, $5, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $5, $5, $5, $5, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $7, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $6, $5 | |
db $5, $5, $7, $7, $7, $7, $7, $5, $5, $6, $6, $6, $6, $6, $5, $5 | |
db $00, $00, $5, $5, $7, $7, $7, $5, $5, $6, $6, $6, $5, $5, $00, $00 | |
db $00, $00, $00, $00, $5, $5, $7, $5, $5, $6, $5, $5, $00, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $00, $5, $5, $5, $5, $00, $00, $00, $00, $00, $00 | |
player db 16 | |
db $00, $00, $00, $00, $00, $1, $1, $1, $1, $1, $1, $00, $00, $00, $00, $00 | |
db $00, $00, $00, $1, $20, $20, $65, $65, $40, $40, $20, $44, $1, $00, $00, $00 | |
db $00, $00, $20, $20, $65, $41, $41, $41, $61, $61, $85, $41, $45, $20, $00, $00 | |
db $00, $1, $65, $41, $65, $81, $a6, $81, $81, $86, $61, $61, $41, $44, $1, $00 | |
db $00, $64, $65, $85, $85, $81, $ca, $c6, $c6, $c6, $81, $a5, $85, $65, $20, $00 | |
db $1, $40, $65, $85, $a6, $a6, $c6, $c6, $c6, $a2, $a6, $81, $a9, $41, $40, $1 | |
db $44, $45, $85, $85, $a1, $c6, $c6, $ea, $ea, $c6, $c6, $ca, $a6, $85, $20, $44 | |
db $20, $40, $61, $a6, $a6, $c6, $e6, $ee, $e6, $e6, $c6, $a6, $81, $85, $65, $44 | |
db $20, $60, $61, $a6, $a6, $a2, $ea, $ea, $ea, $ea, $c6, $a6, $a5, $85, $85, $1 | |
db $20, $40, $61, $a6, $c6, $c6, $a2, $c6, $c6, $e6, $a2, $a5, $61, $61, $41, $1 | |
db $1, $20, $65, $a5, $a6, $ea, $c6, $e6, $e6, $ca, $ca, $a5, $85, $65, $20, $1 | |
db $00, $20, $40, $85, $86, $a6, $a1, $a2, $a2, $a1, $81, $81, $61, $41, $44, $00 | |
db $00, $1, $44, $41, $a9, $85, $85, $aa, $86, $ca, $61, $89, $65, $20, $1, $00 | |
db $00, $00, $20, $20, $40, $61, $61, $61, $85, $61, $61, $60, $45, $24, $00, $00 | |
db $00, $00, $00, $1, $20, $45, $45, $45, $40, $20, $40, $44, $1, $00, $00, $00 | |
db $00, $00, $00, $00, $00, $1, $44, $20, $20, $20, $1, $00, $00, $00, $00, $00 | |
; 16x16 cartesian to isometric coordinate lookup table | |
; Y in high byte, X in low byte | |
isoCoordTbl | |
dw $2078, $2480, $2888, $2C90, $3098, $34A0, $38A8, $3CB0, $40B8, $44C0, $48C8, $4CD0, $50D8, $54E0, $58E8, $5CF0 | |
dw $2470, $2878, $2C80, $3088, $3490, $3898, $3CA0, $40A8, $44B0, $48B8, $4CC0, $50C8, $54D0, $58D8, $5CE0, $60E8 | |
dw $2868, $2C70, $3078, $3480, $3888, $3C90, $4098, $44A0, $48A8, $4CB0, $50B8, $54C0, $58C8, $5CD0, $60D8, $64E0 | |
dw $2C60, $3068, $3470, $3878, $3C80, $4088, $4490, $4898, $4CA0, $50A8, $54B0, $58B8, $5CC0, $60C8, $64D0, $68D8 | |
dw $3058, $3460, $3868, $3C70, $4078, $4480, $4888, $4C90, $5098, $54A0, $58A8, $5CB0, $60B8, $64C0, $68C8, $6CD0 | |
dw $3450, $3858, $3C60, $4068, $4470, $4878, $4C80, $5088, $5490, $5898, $5CA0, $60A8, $64B0, $68B8, $6CC0, $70C8 | |
dw $3848, $3C50, $4058, $4460, $4868, $4C70, $5078, $5480, $5888, $5C90, $6098, $64A0, $68A8, $6CB0, $70B8, $74C0 | |
dw $3C40, $4048, $4450, $4858, $4C60, $5068, $5470, $5878, $5C80, $6088, $6490, $6898, $6CA0, $70A8, $74B0, $78B8 | |
dw $4038, $4440, $4848, $4C50, $5058, $5460, $5868, $5C70, $6078, $6480, $6888, $6C90, $7098, $74A0, $78A8, $7CB0 | |
dw $4430, $4838, $4C40, $5048, $5450, $5858, $5C60, $6068, $6470, $6878, $6C80, $7088, $7490, $7898, $7CA0, $80A8 | |
dw $4828, $4C30, $5038, $5440, $5848, $5C50, $6058, $6460, $6868, $6C70, $7078, $7480, $7888, $7C90, $8098, $84A0 | |
dw $4C20, $5028, $5430, $5838, $5C40, $6048, $6450, $6858, $6C60, $7068, $7470, $7878, $7C80, $8088, $8490, $8898 | |
dw $5018, $5420, $5828, $5C30, $6038, $6440, $6848, $6C50, $7058, $7460, $7868, $7C70, $8078, $8480, $8888, $8C90 | |
dw $5410, $5818, $5C20, $6028, $6430, $6838, $6C40, $7048, $7450, $7858, $7C60, $8068, $8470, $8878, $8C80, $9088 | |
dw $5808, $5C10, $6018, $6420, $6828, $6C30, $7038, $7440, $7848, $7C50, $8058, $8460, $8868, $8C70, $9078, $9480 | |
dw $5C00, $6008, $6410, $6818, $6C20, $7028, $7430, $7838, $7C40, $8048, $8450, $8858, $8C60, $9068, $9470, $9878 | |
;------------------------------------------------------------------------------ | |
; Stack reservation | |
STACK_SIZE equ 200 | |
stack_bottom: | |
defs STACK_SIZE * 2 | |
stack_top: | |
defw 0 | |
;------------------------------------------------------------------------------ | |
; Output configuration | |
SAVENEX OPEN "isodemo.nex", main, stack_top | |
SAVENEX CORE 2,0,0 | |
SAVENEX CFG 7,0,0,0 | |
SAVENEX AUTO | |
SAVENEX CLOSE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment