From b6c75088ae0bcd6e36913f422359e47608a3d6db Mon Sep 17 00:00:00 2001 From: jonnosan Date: Sun, 22 May 2011 09:25:09 +0000 Subject: [PATCH] drivers now display base I/O address git-svn-id: http://svn.code.sf.net/p/netboot65/code@310 93682198-c243-4bdb-bd91-e943c89aac3b --- client/basic/bails.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.d64 | Bin 174848 -> 174848 bytes client/carts/Makefile | 5 +++ client/carts/kippergo.s | 6 +-- client/carts/kipperkart.s | 2 +- client/carts/kipperterm.s | 2 +- client/carts/netboot.s | 72 ++++++++++++++++++++----------- client/drivers/lan91c96.s | 6 ++- client/drivers/rr-net.s | 26 +++++++---- client/drivers/uthernet.s | 7 ++- client/drivers/vic20-rr-net.s | 7 +-- client/drivers/w5100.s | 15 +++++-- client/inc/commonprint.i | 14 +++++- client/kipperterm2/Makefile | 2 +- client/kipperterm2/kipperterm2.s | 11 ++++- client/kipperterm2/timestamp.i | 2 +- client/test/test_wiznet.s | 7 +++ client/wiznet/kipperwizdisk.d64 | Bin 174848 -> 174848 bytes 18 files changed, 129 insertions(+), 55 deletions(-) diff --git a/client/basic/bails.d64 b/client/basic/bails.d64 index 1e98dda1d69dc82c013fc0957a74dd39fb00abe0..64ab10a628709a16a1ef23dcb85dd1e1fbc95669 100644 GIT binary patch delta 5739 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 delta 5730 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 diff --git a/client/basic/kipperbas.d64 b/client/basic/kipperbas.d64 index d84ae7512d7eaacc366465fccd8f733415eb908c..f7943c8200d9d37656f5e1062cf48902b9ad816c 100644 GIT binary patch delta 6566 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 F{|79#NpJuF delta 6571 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 R&=&EvLtE0y9`*==@P83)LJa@_ diff --git a/client/carts/Makefile b/client/carts/Makefile index 7b8b7c9..0c89a95 100644 --- a/client/carts/Makefile +++ b/client/carts/Makefile @@ -33,6 +33,7 @@ all: ip65 drivers\ kippergo.prg \ kippergo_rr.bin \ kipperdisk.d64 \ + netbootwiz.bin \ kipperkart.o: kipperkart.s $(INCFILES) ../inc/ping.i ../inc/disk_transfer.i ../inc/sidplay.i ../inc/config_menu.i $(AS) $(AFLAGS) -o $@ $< @@ -114,6 +115,10 @@ kkwiz.bin: kipperkart.o $(IP65WIZNETLIB) $(C64WIZNETLIB) $(INCFILES) ../cfg/c64_ ruby fix_cart.rb $@ 16384 # ruby set_ip_config.rb $@ mac auto +netbootwiz.bin: netboot.o $(IP65WIZNETLIB) $(C64WIZNETLIB) $(INCFILES) ../cfg/c64_8kcart.cfg + $(LD) -m netboot.map -vm -C ../cfg/c64_8kcart.cfg -o $@ $< $(IP65WIZNETLIB) $(C64WIZNETLIB) + ruby fix_cart.rb $@ 8192 + d64_upload.d64: d64_upload.prg diff --git a/client/carts/kippergo.s b/client/carts/kippergo.s index cf20eaa..3934fba 100644 --- a/client/carts/kippergo.s +++ b/client/carts/kippergo.s @@ -115,9 +115,9 @@ warm_init: ldax #menu_header_msg jsr print_ascii_as_native - ldax #init_msg+1 - jsr print_ascii_as_native - +; ldax #init_msg+1 +; jsr print_ascii_as_native + print_driver_init jsr ip65_init bcs init_failed jsr dhcp_init diff --git a/client/carts/kipperkart.s b/client/carts/kipperkart.s index 0eae121..1689e59 100644 --- a/client/carts/kipperkart.s +++ b/client/carts/kipperkart.s @@ -166,7 +166,7 @@ warm_init: ldax #menu_header_msg jsr print_ascii_as_native ldax #init_msg+1 - jsr print_ascii_as_native + jsr print_ascii_as_native kippercall #KPR_INITIALIZE bcc init_ok diff --git a/client/carts/kipperterm.s b/client/carts/kipperterm.s index 787a927..bb05ded 100644 --- a/client/carts/kipperterm.s +++ b/client/carts/kipperterm.s @@ -130,7 +130,7 @@ warm_init: ldax #menu_header_msg jsr print_ascii_as_native ldax #init_msg+1 - jsr print_ascii_as_native + jsr print_ascii_as_native jsr ip65_init bcs init_failed diff --git a/client/carts/netboot.s b/client/carts/netboot.s index 7227012..9e88135 100644 --- a/client/carts/netboot.s +++ b/client/carts/netboot.s @@ -68,12 +68,19 @@ get_value_of_axy: ;some more self-modifying code .word init ;cold start vector .word $FE47 ;warm start vector .byte $C3,$C2,$CD,$38,$30 ; "CBM80" +.byte $0,$0,$0 ;reserved for future use +.byte $0,$0,$0 ;reserved for future use +.byte $0,$0,$0 ;reserved for future use +.byte $0,$0,$0 ;reserved for future use +.byte $0,$0,$0 ;reserved for future use + .code init: + ;first let the kernal do a normal startup sei jsr $fda3 ;initialize CIA I/O @@ -107,22 +114,31 @@ init: stax copy_dest ldax #__DATA_SIZE__ jsr copymem - + ldax #__SELF_MODIFIED_CODE_LOAD__ + stax copy_src + ldax #__SELF_MODIFIED_CODE_RUN__ + stax copy_dest + ldax #__SELF_MODIFIED_CODE_SIZE__ + jsr copymem ldax #netboot_msg - jsr print - ldax #init_msg+1 - jsr print + jsr print_ascii_as_native + + print_driver_init jsr ip65_init + + + bcs @init_failed jsr dhcp_init bcc init_ok jsr ip65_init ;if DHCP failed, then reinit the IP stack (which will reset IP address etc that DHCP messed with to cartridge default values) bcc init_ok @init_failed: + print_failed jsr print_errorcode jsr wait_for_keypress @@ -130,6 +146,9 @@ init: init_ok: + + + ldx #$03 : lda cfg_tftp_server,x @@ -199,7 +218,7 @@ get_tftp_directory_listing: stax tftp_load_address ldax #getting_dir_listing_msg - jsr print + jsr print_ascii_as_native jsr tftp_download @@ -253,7 +272,7 @@ get_tftp_directory_listing: @dir_failed: ldax #dir_listing_fail_msg - jsr print + jsr print_ascii_as_native jsr print_errorcode jsr print_cr @@ -262,7 +281,7 @@ get_tftp_directory_listing: @no_files_on_server: ldax #no_files - jsr print + jsr print_ascii_as_native jmp tftp_boot_failed @@ -279,9 +298,9 @@ download: ;AX should point at filename to download stax tftp_load_address ldax #downloading_msg - jsr print + jsr print_ascii_as_native ldax tftp_filename - jsr print + jsr print_ascii_as_native jsr print_cr jsr tftp_download @@ -289,20 +308,20 @@ download: ;AX should point at filename to download bcc :+ ldax #tftp_download_fail_msg - jsr print + jsr print_ascii_as_native jsr print_errorcode sec rts : ldax #tftp_download_ok_msg - jsr print + jsr print_ascii_as_native clc rts wait_for_keypress: ldax #press_a_key_to_continue - jsr print + jsr print_ascii_as_native @loop: jsr $ffe4 beq @loop @@ -318,30 +337,26 @@ get_key: .rodata netboot_msg: -.byte 13,"NETBOOT - V" +.byte 14,10,"NETBOOT - V" .include "../inc/version.i" -.byte 13,0 -downloading_msg: .byte "DOWN" -loading_msg: .asciiz "LOADING " +.byte 10,0 +downloading_msg: .byte "down" +loading_msg: .asciiz "loading " -getting_dir_listing_msg: .byte "FETCHING DIRECTORY",13,0 +getting_dir_listing_msg: .byte "fetching directory",10,0 dir_listing_fail_msg: - .byte "DIR FAILED",13,0 + .byte "dir failed",10,0 tftp_download_fail_msg: - .byte "DOWNLOAD FAILED", 13, 0 + .byte "download failed", 10, 0 tftp_download_ok_msg: - .byte "DOWN" + .byte "down" load_ok_msg: - .byte "LOAD OK", 13, 0 + .byte "load OK", 10, 0 -current: -.byte "CURRENT ",0 -new: -.byte"NEW ",0 tftp_dir_filemask: .asciiz "$/*.prg" @@ -350,7 +365,12 @@ tftp_file: .asciiz "BOOTC64.PRG" no_files: - .byte "NO FILES",13,0 + .byte "No files",10,0 + + +;we need a 'dummy' segment here - some drivers use this segment (e.g. wiznet), some don't (e.g. rr-net) +;if we don't declare this, we get an 'undefined segment' error when linking to a driver that doesn't use it. +.segment "SELF_MODIFIED_CODE" ;-- LICENSE FOR netboot.s -- ; The contents of this file are subject to the Mozilla Public License diff --git a/client/drivers/lan91c96.s b/client/drivers/lan91c96.s index 089e453..37e9422 100644 --- a/client/drivers/lan91c96.s +++ b/client/drivers/lan91c96.s @@ -16,7 +16,7 @@ .export eth_rx .export eth_tx .export eth_driver_name - + .export eth_driver_io_base .import eth_inp .import eth_inp_len .import eth_outp @@ -443,7 +443,9 @@ lan_self_modify: .rodata eth_driver_name: .asciiz "LANceGS (91C96)" - +eth_driver_io_base=fixlan01+1 + + ; The contents of this file are subject to the Mozilla Public License ; Version 1.1 (the "License"); you may not use this file except in ; compliance with the License. You may obtain a copy of the License at diff --git a/client/drivers/rr-net.s b/client/drivers/rr-net.s index 8e21a99..4059c81 100644 --- a/client/drivers/rr-net.s +++ b/client/drivers/rr-net.s @@ -9,13 +9,16 @@ .export cs_tx_cmd .export cs_tx_len .export eth_driver_name - -rr_ctl = $de01 ;address of 'control' port on Retro-Replay -cs_packet_page = $de02 ;address of 'packet page' port on RR-Net -cs_packet_data = $de04;address of 'packet data' port on RR-Net -cs_rxtx_data = $de08 ;address of 'recieve/transmit data' port on RR-Net -cs_tx_cmd = $de0c;address of 'transmit command' port on RR-Net -cs_tx_len = $de0e;address of 'transmission length' port on RR-Net + .export eth_driver_io_base + +IO_BASE=$de00 +;IO_BASE=$df00 +rr_ctl = IO_BASE+1 ;address of 'control' port on Retro-Replay +cs_packet_page = IO_BASE+2 ;address of 'packet page' port on RR-Net +cs_packet_data = IO_BASE+4;address of 'packet data' port on RR-Net +cs_rxtx_data = IO_BASE+8 ;address of 'recieve/transmit data' port on RR-Net +cs_tx_cmd = IO_BASE+$0c;address of 'transmit command' port on RR-Net +cs_tx_len = IO_BASE+$0e;address of 'transmission length' port on RR-Net .code @@ -31,8 +34,13 @@ cs_init: .rodata eth_driver_name: - .asciiz "RR-NET" - +.if IO_BASE=$de00 +.byte "RR-NET",0 +.else +.byte "64NIC+",0 +.endif +eth_driver_io_base: +.word IO_BASE ;-- LICENSE FOR rr-net.s -- diff --git a/client/drivers/uthernet.s b/client/drivers/uthernet.s index 8bd9b6b..9e9cbd3 100644 --- a/client/drivers/uthernet.s +++ b/client/drivers/uthernet.s @@ -9,8 +9,9 @@ .export cs_rxtx_data .export cs_tx_cmd .export cs_tx_len - .export eth_driver_name - + .export eth_driver_name + .export eth_driver_io_base + cs_rxtx_data = $c0b0 ;address of 'recieve/transmit data' port on Uthernet cs_tx_cmd = $c0b4;address of 'transmit command' port on Uthernet cs_tx_len = $c0b6;address of 'transmission length' port on Uthernet @@ -27,6 +28,8 @@ cs_init: .rodata eth_driver_name: .byte "UTHERNET",0 +eth_driver_io_base: + .word cs_rxtx_data ;-- LICENSE FOR uthernet.s -- diff --git a/client/drivers/vic20-rr-net.s b/client/drivers/vic20-rr-net.s index 925ea13..e851e49 100644 --- a/client/drivers/vic20-rr-net.s +++ b/client/drivers/vic20-rr-net.s @@ -8,8 +8,8 @@ .export cs_rxtx_data .export cs_tx_cmd .export cs_tx_len - .export eth_driver_name - + .export eth_driver_name + .export eth_driver_io_base rr_ctl = $9801 ;address of 'control' port on Retro-Replay cs_packet_page = $9802 ;address of 'packet page' port on RR-Net @@ -33,7 +33,8 @@ cs_init: .rodata eth_driver_name: .asciiz "VIC20 RR-NET" - +eth_driver_io_base: + .word rr_ctl-1 ;-- LICENSE FOR vic20-rr-net.s -- diff --git a/client/drivers/w5100.s b/client/drivers/w5100.s index a86f66f..8194f2e 100644 --- a/client/drivers/w5100.s +++ b/client/drivers/w5100.s @@ -10,14 +10,16 @@ .include "w5100.i" -DEFAULT_W5100_BASE = $DF20 +;DEFAULT_W5100_BASE = $DF20 + +DEFAULT_W5100_BASE = $DE04 ;DEBUG = 1 .export eth_init .export eth_rx .export eth_tx .export eth_driver_name - + .export eth_driver_io_base .import eth_inp .import eth_inp_len .import eth_outp @@ -77,6 +79,8 @@ DEFAULT_W5100_BASE = $DF20 ;w5100 aware apps can use w5100_init and pass in a different ;base address eth_init: + + ldax #DEFAULT_W5100_BASE ;initialize the w5100 ethernet adaptor @@ -950,6 +954,9 @@ read_reg_and_inc: .rodata eth_driver_name: .asciiz "WIZNET 5100" + +eth_driver_io_base=read_mode_reg+1 + w5100_config_data: .byte $00 ;no interrupts .byte $0f ;400ms retry (default) @@ -1007,10 +1014,10 @@ inc_hi: read_mode_reg: - lda $FFFF ;WIZNET_BASE + lda DEFAULT_W5100_BASE ;WIZNET_BASE rts write_mode_reg: - sta $FFFF ;WIZNET_BASE + sta DEFAULT_W5100_BASE ;WIZNET_BASE rts next_eth_packet_byte: diff --git a/client/inc/commonprint.i b/client/inc/commonprint.i index a994f23..3900e96 100644 --- a/client/inc/commonprint.i +++ b/client/inc/commonprint.i @@ -32,6 +32,7 @@ .import eth_driver_name +.import eth_driver_io_base .importzp copy_src .import cfg_tftp_server ;reuse the copy_src zero page var @@ -45,8 +46,19 @@ temp_ptr: .res 2 .macro print_driver_init ldax #eth_driver_name jsr print_ascii_as_native + lda #'(' + jsr print_a + lda #'$' + jsr print_a + lda eth_driver_io_base+1 + jsr print_hex + lda eth_driver_io_base + jsr print_hex + lda #')' + jsr print_a + ldax #init_msg - jsr print_ascii_as_native + jsr print_ascii_as_native .endmacro diff --git a/client/kipperterm2/Makefile b/client/kipperterm2/Makefile index 2f0e153..c6a27f9 100644 --- a/client/kipperterm2/Makefile +++ b/client/kipperterm2/Makefile @@ -34,7 +34,7 @@ kipperterm2.o: kipperterm2.s $(INCFILES) ../inc/telnet.i ../inc/config_menu.i .. kt2wiz.prg: kipperterm2.o $(IP65WIZNETLIB) $(C64WIZNETLIB) $(INCFILES) ../cfg/c64fullprg.cfg $(LD) -m kt2wiz.map -vm -C ../cfg/c64fullprg.cfg -o kt2wiz.prg $(AFLAGS) $< $(IP65WIZNETLIB) $(C64WIZNETLIB) -# cp kt2wiz.prg ../../server/boot/autoexec.prg + cp kt2wiz.prg ../../server/boot kipperterm2.d64: kipperterm2.prg kt2wiz.prg addresses.txt abe.bas diff --git a/client/kipperterm2/kipperterm2.s b/client/kipperterm2/kipperterm2.s index 6d420c1..18049d3 100644 --- a/client/kipperterm2/kipperterm2.s +++ b/client/kipperterm2/kipperterm2.s @@ -106,7 +106,16 @@ init: jsr print_ascii_as_native ldax #init_msg+1 jsr print_ascii_as_native - + ldax #eth_driver_name + jsr print_ascii_as_native + lda #' ' + jsr print_a + lda eth_driver_io_base+1 + jsr print_hex + lda eth_driver_io_base + jsr print_hex + lda #' ' + jsr print_a jsr ip65_init bcs init_failed jsr dhcp_init diff --git a/client/kipperterm2/timestamp.i b/client/kipperterm2/timestamp.i index 0daffbe..8ae485c 100644 --- a/client/kipperterm2/timestamp.i +++ b/client/kipperterm2/timestamp.i @@ -1 +1 @@ -.byte "2011-01-29" +.byte "2011-05-22" diff --git a/client/test/test_wiznet.s b/client/test/test_wiznet.s index c27523c..3960a84 100644 --- a/client/test/test_wiznet.s +++ b/client/test/test_wiznet.s @@ -53,6 +53,12 @@ basicstub: init: + ldax #starting + jsr print +@loop: + inc $d020 + jmp @loop + ldax #$DE00 jsr probe_for_w5100 @@ -402,6 +408,7 @@ get_next_byte: .rodata +starting: .byte "STARTING",13,0 ms: .byte " MS",13,0 pinging: .byte "PINGING ",0 connecting: .byte "CONNECTING ",0 diff --git a/client/wiznet/kipperwizdisk.d64 b/client/wiznet/kipperwizdisk.d64 index 2fb51fad14ebb0c550cfff9eb55a8069db58d0cf..1d4f3f9f4a880eff467e8009b3fcc3f6dbbf3ae2 100644 GIT binary patch delta 16526 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 DfyQYQ