junglejourney
changeset 217:59f37c9e74e4
Finished ROM loader and main code programs.
| author | David Boddie <david@boddie.org.uk> |
|---|---|
| date | Sun Oct 16 21:36:30 2011 +0200 |
| parents | cdceac4f5ea8 |
| children | 958f6c30e575 |
| files | buildrom.py mapcode.oph romcode.oph romloader.oph |
| diffstat | 4 files changed, 86 insertions(+), 37 deletions(-) [+] |
line diff
1.1 --- a/buildrom.py Sun Oct 16 18:25:22 2011 +0200 1.2 +++ b/buildrom.py Sun Oct 16 21:36:30 2011 +0200 1.3 @@ -21,7 +21,7 @@ 1.4 1.5 if __name__ == "__main__": 1.6 1.7 - if not 1 <= len(sys.argv) <= 3: 1.8 + if not 1 <= len(sys.argv) <= 3 or "-h" in sys.argv[1:] or "--help" in sys.argv[1:]: 1.9 1.10 sys.stderr.write("Usage: %s [<code ROM file> <loader ROM file>]\n" % sys.argv[0]) 1.11 sys.exit(1) 1.12 @@ -39,16 +39,16 @@ 1.13 # CODE 1.14 # 1.15 # 8000 ROM header code 1.16 - # 8300 title screen (0x1800 bytes including completion screen) 1.17 + # 8400 title screen (0x1800 bytes including completion screen) 1.18 # 1.19 - # 9B00 CHARS (0x1280 bytes of character sprites) 1.20 - # AD80 SPRITES (0x360 bytes of tile sprites) 1.21 - # B0E0 space 1.22 + # 9C00 CHARS (0x1280 bytes of character sprites) 1.23 + # AE80 SPRITES (0x360 bytes of tile sprites) 1.24 + # B1E0 space 1.25 1.26 system("ophis romcode.oph " + code_rom_file) 1.27 1.28 # Add padding after the code to make a final image size of 16K. 1.29 - romcode = open("junglecode.rom", "rb").read() 1.30 + romcode = open(code_rom_file, "rb").read() 1.31 romcode += (0x4000 - len(romcode))*"\x00" 1.32 open(code_rom_file, "wb").write(romcode) 1.33 1.34 @@ -57,16 +57,16 @@ 1.35 romdata = open(loader_rom_file, "rb").read() 1.36 1.37 # Add padding before the data is appended to the loader code. 1.38 - romdata += (0x300 - len(romdata))*"\x00" 1.39 + romdata += (0x400 - len(romdata))*"\x00" 1.40 1.41 - data = makesprites.read_sprites([makesprites.title]) 1.42 + romdata += makesprites.read_sprites([makesprites.title]) 1.43 completed = makesprites.encode(makesprites.read_sprite(makesprites.completed)) 1.44 overlay = makesprites.read_sprite(makesprites.overlay) 1.45 combined = makesprites.combine(completed, overlay) 1.46 romdata += combined 1.47 1.48 + romdata += makesprites.read_sprites(makesprites.chars) 1.49 romdata += makesprites.read_sprites(makesprites.tiles) 1.50 - romdata += makesprites.read_sprites(makesprites.chars) 1.51 romdata += (0x4000 - len(romdata))*"\x00" 1.52 1.53 open(loader_rom_file, "wb").write(romdata)
2.1 --- a/mapcode.oph Sun Oct 16 18:25:22 2011 +0200 2.2 +++ b/mapcode.oph Sun Oct 16 21:36:30 2011 +0200 2.3 @@ -4616,7 +4616,7 @@ 2.4 lda input_message,x 2.5 jsr $ffee 2.6 inx 2.7 - cpx #23 2.8 + cpx #21 2.9 bne show_input_message_loop 2.10 2.11 rts
3.1 --- a/romcode.oph Sun Oct 16 18:25:22 2011 +0200 3.2 +++ b/romcode.oph Sun Oct 16 21:36:30 2011 +0200 3.3 @@ -15,11 +15,11 @@ 3.4 3.5 .org $8000 3.6 rom_start: 3.7 -jmp language_entry 3.8 +.byte 0, 0, 0 3.9 jmp service_entry 3.10 3.11 ; ROM type 3.12 -.byte $c2 ; 6502 code (2), language ($40), service ($80) 3.13 +.byte $82 ; 6502 code (2), language ($40), service ($80) 3.14 3.15 copyright_offset: 3.16 .byte [copyright_string - rom_start - 1] 3.17 @@ -39,10 +39,6 @@ 3.18 ; Second processor relocation address 3.19 .byte 0, $80, 0, 0 3.20 3.21 -language_entry: 3.22 - 3.23 - jmp jungle_code 3.24 - 3.25 service_entry: 3.26 3.27 cmp #4 3.28 @@ -51,7 +47,7 @@ 3.29 service_entry_exit: 3.30 rts 3.31 3.32 -rom_name: .byte "JUNGLECODE" 3.33 +rom_name: .byte "JUNGLECODE", 13 3.34 3.35 service_command: 3.36 3.37 @@ -68,7 +64,7 @@ 3.38 bne service_command_exit 3.39 inx 3.40 iny 3.41 - cpx #10 3.42 + cpx #11 3.43 bne service_command_loop 3.44 3.45 jsr jungle_code 3.46 @@ -78,7 +74,7 @@ 3.47 service_command_exit: 3.48 pla ; pop Y and X registers off the stack 3.49 tax 3.50 - pha 3.51 + pla 3.52 tay 3.53 lda #4 ; restore A 3.54 rts
4.1 --- a/romloader.oph Sun Oct 16 18:25:22 2011 +0200 4.2 +++ b/romloader.oph Sun Oct 16 21:36:30 2011 +0200 4.3 @@ -51,7 +51,7 @@ 4.4 service_entry_exit: 4.5 rts 4.6 4.7 -rom_name: .byte "JUNGLE" 4.8 +rom_name: .byte "JUNGLE", 13 4.9 4.10 service_command: 4.11 4.12 @@ -68,7 +68,7 @@ 4.13 bne service_command_exit 4.14 inx 4.15 iny 4.16 - cpx #10 4.17 + cpx #7 4.18 bne service_command_loop 4.19 4.20 jsr jungle_code 4.21 @@ -78,7 +78,7 @@ 4.22 service_command_exit: 4.23 pla ; pop Y and X registers off the stack 4.24 tax 4.25 - pha 4.26 + pla 4.27 tay 4.28 lda #4 ; restore A 4.29 rts 4.30 @@ -127,24 +127,45 @@ 4.31 jsr $fff4 ; *TAPE 4.32 4.33 jsr copy_title_down 4.34 - jsr move_completed_screen_down 4.35 - jsr copy_sprites_from_rom 4.36 - jsr copy_chars_from_rom 4.37 4.38 - lda #129 ; returns y=255 or 0 4.39 - ldx #157 ; SPACE 4.40 - ldy #255 4.41 + ldx #0 4.42 + show_input_message_loop: 4.43 + 4.44 + lda input_message,x 4.45 + jsr $ffee 4.46 + inx 4.47 + cpx #21 4.48 + bne show_input_message_loop 4.49 + 4.50 wait_loop: 4.51 + 4.52 + lda #128 4.53 + ldx #0 4.54 + jsr $fff4 4.55 + cpx #0 ; fire button pressed? 4.56 + beq wait_no_joystick 4.57 + jmp continue 4.58 + 4.59 + wait_no_joystick: 4.60 + 4.61 + lda #129 ; returns y=255 or 0 4.62 + ldx #157 ; SPACE 4.63 + ldy #255 4.64 jsr $fff4 4.65 cpy #255 4.66 bne wait_loop 4.67 4.68 - ldx #<start_game 4.69 - ldy #>start_game 4.70 - jsr $fff7 4.71 - rts 4.72 + continue: 4.73 + clc 4.74 4.75 -start_game: .byte "*JUNGLECODE", 13, 0 4.76 + jsr move_completed_screen_down 4.77 + jsr copy_sprites_from_rom 4.78 + jsr copy_chars_from_rom 4.79 + jsr copy_launch_code 4.80 + 4.81 + jmp $1e00 4.82 + 4.83 +input_message: .byte 17,3, 31,2,28, "Press SPACE/FIRE" 4.84 4.85 set_hidden_palette: 4.86 4.87 @@ -202,7 +223,7 @@ 4.88 4.89 lda #$00 4.90 sta $70 4.91 - lda #$83 4.92 + lda #$84 4.93 sta $71 4.94 4.95 lda #$a0 4.96 @@ -371,7 +392,7 @@ 4.97 4.98 lda #$80 4.99 sta $70 4.100 - lda #$ad 4.101 + lda #$ae 4.102 sta $71 4.103 4.104 lda #$00 4.105 @@ -419,7 +440,7 @@ 4.106 4.107 lda #$00 4.108 sta $70 4.109 - lda #$9b 4.110 + lda #$9c 4.111 sta $71 4.112 4.113 lda #$00 4.114 @@ -455,7 +476,7 @@ 4.115 sta $73 4.116 clc 4.117 4.118 - cmp #$ad 4.119 + cmp #$51 4.120 bne copy_chars_from_rom_loop1 4.121 lda $72 4.122 cmp #$80 4.123 @@ -463,3 +484,35 @@ 4.124 4.125 clc 4.126 rts 4.127 + 4.128 +launch_code: 4.129 + 4.130 + ldx #[start_game - launch_code] 4.131 + ldy #$1e 4.132 + jsr $fff7 4.133 + 4.134 +start_game: .byte "*JUNGLECODE", 13, 0 4.135 + 4.136 +copy_launch_code: ; copy the launch code to $1e00 4.137 + 4.138 + lda #<launch_code 4.139 + sta $70 4.140 + lda #>launch_code 4.141 + sta $71 4.142 + 4.143 + lda #$00 4.144 + sta $72 4.145 + lda #$1e 4.146 + sta $73 4.147 + 4.148 + ldy #[copy_launch_code - launch_code - 1] 4.149 + 4.150 + copy_launch_code_loop: 4.151 + 4.152 + lda ($70),y 4.153 + sta ($72),y 4.154 + dey 4.155 + bpl copy_launch_code_loop 4.156 + 4.157 + clc 4.158 + rts
