# HG changeset patch # User David Boddie # Date 1318793790 -7200 # Node ID 59f37c9e74e48dda3559bf4f0c49fc4eb6f9f34d # Parent cdceac4f5ea85f987beb899fbc91f37e98c72f06 Finished ROM loader and main code programs. diff -r cdceac4f5ea8 -r 59f37c9e74e4 buildrom.py --- a/buildrom.py Sun Oct 16 18:25:22 2011 +0200 +++ b/buildrom.py Sun Oct 16 21:36:30 2011 +0200 @@ -21,7 +21,7 @@ if __name__ == "__main__": - if not 1 <= len(sys.argv) <= 3: + if not 1 <= len(sys.argv) <= 3 or "-h" in sys.argv[1:] or "--help" in sys.argv[1:]: sys.stderr.write("Usage: %s [ ]\n" % sys.argv[0]) sys.exit(1) @@ -39,16 +39,16 @@ # CODE # # 8000 ROM header code - # 8300 title screen (0x1800 bytes including completion screen) + # 8400 title screen (0x1800 bytes including completion screen) # - # 9B00 CHARS (0x1280 bytes of character sprites) - # AD80 SPRITES (0x360 bytes of tile sprites) - # B0E0 space + # 9C00 CHARS (0x1280 bytes of character sprites) + # AE80 SPRITES (0x360 bytes of tile sprites) + # B1E0 space system("ophis romcode.oph " + code_rom_file) # Add padding after the code to make a final image size of 16K. - romcode = open("junglecode.rom", "rb").read() + romcode = open(code_rom_file, "rb").read() romcode += (0x4000 - len(romcode))*"\x00" open(code_rom_file, "wb").write(romcode) @@ -57,16 +57,16 @@ romdata = open(loader_rom_file, "rb").read() # Add padding before the data is appended to the loader code. - romdata += (0x300 - len(romdata))*"\x00" + romdata += (0x400 - len(romdata))*"\x00" - data = makesprites.read_sprites([makesprites.title]) + romdata += makesprites.read_sprites([makesprites.title]) completed = makesprites.encode(makesprites.read_sprite(makesprites.completed)) overlay = makesprites.read_sprite(makesprites.overlay) combined = makesprites.combine(completed, overlay) romdata += combined + romdata += makesprites.read_sprites(makesprites.chars) romdata += makesprites.read_sprites(makesprites.tiles) - romdata += makesprites.read_sprites(makesprites.chars) romdata += (0x4000 - len(romdata))*"\x00" open(loader_rom_file, "wb").write(romdata) diff -r cdceac4f5ea8 -r 59f37c9e74e4 mapcode.oph --- a/mapcode.oph Sun Oct 16 18:25:22 2011 +0200 +++ b/mapcode.oph Sun Oct 16 21:36:30 2011 +0200 @@ -4616,7 +4616,7 @@ lda input_message,x jsr $ffee inx - cpx #23 + cpx #21 bne show_input_message_loop rts diff -r cdceac4f5ea8 -r 59f37c9e74e4 romcode.oph --- a/romcode.oph Sun Oct 16 18:25:22 2011 +0200 +++ b/romcode.oph Sun Oct 16 21:36:30 2011 +0200 @@ -15,11 +15,11 @@ .org $8000 rom_start: -jmp language_entry +.byte 0, 0, 0 jmp service_entry ; ROM type -.byte $c2 ; 6502 code (2), language ($40), service ($80) +.byte $82 ; 6502 code (2), language ($40), service ($80) copyright_offset: .byte [copyright_string - rom_start - 1] @@ -39,10 +39,6 @@ ; Second processor relocation address .byte 0, $80, 0, 0 -language_entry: - - jmp jungle_code - service_entry: cmp #4 @@ -51,7 +47,7 @@ service_entry_exit: rts -rom_name: .byte "JUNGLECODE" +rom_name: .byte "JUNGLECODE", 13 service_command: @@ -68,7 +64,7 @@ bne service_command_exit inx iny - cpx #10 + cpx #11 bne service_command_loop jsr jungle_code @@ -78,7 +74,7 @@ service_command_exit: pla ; pop Y and X registers off the stack tax - pha + pla tay lda #4 ; restore A rts diff -r cdceac4f5ea8 -r 59f37c9e74e4 romloader.oph --- a/romloader.oph Sun Oct 16 18:25:22 2011 +0200 +++ b/romloader.oph Sun Oct 16 21:36:30 2011 +0200 @@ -51,7 +51,7 @@ service_entry_exit: rts -rom_name: .byte "JUNGLE" +rom_name: .byte "JUNGLE", 13 service_command: @@ -68,7 +68,7 @@ bne service_command_exit inx iny - cpx #10 + cpx #7 bne service_command_loop jsr jungle_code @@ -78,7 +78,7 @@ service_command_exit: pla ; pop Y and X registers off the stack tax - pha + pla tay lda #4 ; restore A rts @@ -127,24 +127,45 @@ jsr $fff4 ; *TAPE jsr copy_title_down - jsr move_completed_screen_down - jsr copy_sprites_from_rom - jsr copy_chars_from_rom - lda #129 ; returns y=255 or 0 - ldx #157 ; SPACE - ldy #255 + ldx #0 + show_input_message_loop: + + lda input_message,x + jsr $ffee + inx + cpx #21 + bne show_input_message_loop + wait_loop: + + lda #128 + ldx #0 + jsr $fff4 + cpx #0 ; fire button pressed? + beq wait_no_joystick + jmp continue + + wait_no_joystick: + + lda #129 ; returns y=255 or 0 + ldx #157 ; SPACE + ldy #255 jsr $fff4 cpy #255 bne wait_loop - ldx #start_game - jsr $fff7 - rts + continue: + clc -start_game: .byte "*JUNGLECODE", 13, 0 + jsr move_completed_screen_down + jsr copy_sprites_from_rom + jsr copy_chars_from_rom + jsr copy_launch_code + + jmp $1e00 + +input_message: .byte 17,3, 31,2,28, "Press SPACE/FIRE" set_hidden_palette: @@ -202,7 +223,7 @@ lda #$00 sta $70 - lda #$83 + lda #$84 sta $71 lda #$a0 @@ -371,7 +392,7 @@ lda #$80 sta $70 - lda #$ad + lda #$ae sta $71 lda #$00 @@ -419,7 +440,7 @@ lda #$00 sta $70 - lda #$9b + lda #$9c sta $71 lda #$00 @@ -455,7 +476,7 @@ sta $73 clc - cmp #$ad + cmp #$51 bne copy_chars_from_rom_loop1 lda $72 cmp #$80 @@ -463,3 +484,35 @@ clc rts + +launch_code: + + ldx #[start_game - launch_code] + ldy #$1e + jsr $fff7 + +start_game: .byte "*JUNGLECODE", 13, 0 + +copy_launch_code: ; copy the launch code to $1e00 + + lda #launch_code + sta $71 + + lda #$00 + sta $72 + lda #$1e + sta $73 + + ldy #[copy_launch_code - launch_code - 1] + + copy_launch_code_loop: + + lda ($70),y + sta ($72),y + dey + bpl copy_launch_code_loop + + clc + rts