riven: more work on getting hd load to work

This commit is contained in:
Vince Weaver 2024-07-16 23:32:44 -04:00
parent 563ac02a3e
commit e714cdf8be
6 changed files with 67 additions and 1619 deletions

View File

@ -19,28 +19,6 @@ all: riven_disk00.dsk \
####
#prorwts_ca65.o: prorwts_ca65.s
# ca65 -o prorwts_ca65.o prorwts_ca65.s -l prorwts_ca65.lst
###
#riven_hgr.2mg: \
# disk01_files/LEVEL_ARRIVAL
# $(CADIUS) CREATEVOLUME riven_hgr.2mg Riven 32MB
# $(CADIUS) CREATEFOLDER riven_hgr.2mg /Riven/DISK01
# $(CADIUS) CREATEFOLDER riven_hgr.2mg /Riven/DISK39
# $(CADIUS) CREATEFOLDER riven_hgr.2mg /Riven/DISK40
# $(CADIUS) CREATEFOLDER riven_hgr.2mg /Riven/DISK41
# $(CADIUS) CREATEFOLDER riven_hgr.2mg /Riven/DISK43
# $(CADIUS) ADDFILE riven_hgr.2mg /Riven/DISK01/ disk01_files/LEVEL_ARRIVAL
###
riven_disk00.dsk: QBOOT QLOAD TITLE_00 \
disk00_files/DISK00 \
disk00_files/ATRUS \
@ -334,7 +312,7 @@ graphics_title/riven_title.hgr.zx02:
####
clean:
rm -f *~ *.o *.lst generate_common \
rm -f *~ *.o *.lst dts_block generate_common \
QBOOT QLOAD QLOAD_HD \
TITLE_00 TITLE_01 TITLE_39 TITLE_40 TITLE_41 TITLE_43
cd disk00_files && make clean
@ -394,12 +372,34 @@ submit: riven_disk00.dsk riven_disk01.dsk \
riven_disk40.dsk riven_disk41.dsk riven_disk43.dsk
###
dts_block: dts_block.o
$(CC) $(LFLAGS) -o dts_block dts_block.o
dts_block.o: dts_block.c
$(CC) $(CFLAGS) -c dts_block.c
####
riven_hgr.2mg: PROBOOTHD QLOAD_HD
riven_hgr.2mg: dts_block PROBOOTHD QLOAD_HD \
TITLE_00 \
disk00_files/DISK00 \
disk00_files/ATRUS \
disk00_files/CYAN \
disk00_files/CAPTURED \
disk00_files/CHO \
disk00_files/LEVEL_START
$(PRODOSDIR)/mkprodosfs riven_hgr.2mg -n Riven -b 65535 -2
$(PRODOS_RAW) riven_hgr.2mg 0 PROBOOTHD 0 0
$(PRODOS_RAW) riven_hgr.2mg 1024 QLOAD_HD 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 1 0` QLOAD_HD 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 0 2` disk00_files/DISK00 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 0 8` TITLE_00 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 2 0` disk00_files/CYAN 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 10 0` disk00_files/ATRUS 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 18 0` disk00_files/CAPTURED 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 26 0` disk00_files/CHO 0 0
$(PRODOS_RAW) riven_hgr.2mg `./dts_block 0 31 0` disk00_files/LEVEL_START 0 0
###

View File

@ -12,15 +12,17 @@ API for loading:
+ Prodos/HD based
+ proboothd boots disk
+ loads QLOAD equivalent to 1600
+ loads QLOAD to 1600
DDDD DDDT | TTTT TSSS
((disk+1)<<9)+(T<<3)+(S>>1)
((disk*512) + (T*8) + (S/2)
instead: block based
256k for each 140k disk, offset from there?
up to 128 disks
disk#*256k
disk#*512
top block# = disk*2+(top bit of track*16
bottom block# = (track*16)
only one copy of qload/title

View File

@ -0,0 +1,18 @@
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int disk,track,sector;
int block;
disk=atoi(argv[1]);
track=atoi(argv[2]);
sector=atoi(argv[3]);
block=((disk+1)<<9)|(track<<3)|(sector>>1);
printf("%d",block);
return 0;
}

View File

@ -1,31 +1,14 @@
;license:BSD-3-Clause
; based on minimal open/read binary file in ProDOS filesystem
; vaguely based on the minimal open/read binary file in ProDOS filesystem
; from 4cade
;
;copyright (c) Peter Ferrie 2016-2019
.include "hardware.inc"
.include "zp.inc"
; zpage usage, arbitrary selection except for the "ProDOS constant" ones
; this is the structure for a smartport command, at least
; for a read (command=1)
COMMAND = $42 ; ProDOS constant
UNIT = $43 ; ProDOS constant
ADRLO = $44 ; ProDOS constant
ADRHI = $45 ; ProDOS constant
BLOKLO = $46 ; ProDOS constant
BLOKHI = $47 ; ProDOS constant
; A2L = $3e
; A2H = $3f
; sizehi = $53
; start of boot sector, presumably how many sectors to load
; 512 bytes on prodos/hard-disk(???)
@ -73,8 +56,6 @@ proboot_start:
ldy #0
; set up ProDOS shim
; from IIgs smartport firmware manual
@ -92,7 +73,6 @@ setup_loop:
lsr
and #7
ora #$c0
; sta $be30, Y ; ????
sta slot_smc+2
sta entry_smc+2 ; set up smartport/prodos entry point
@ -100,20 +80,8 @@ slot_smc:
lda $cfff
sta entry_smc+1 ; set up rest of smartport/prodos entry
; lda fakeMLI_e-$100, Y
; sta $be00+fakeMLI_e-fakeMLI, Y
; iny
; bne setup_loop ; ?????
; Y is 0 here
; ldy #0
; sty ADRLO
; stx $bf30 ; ?????
; sty $200 ; ?????
opendir:
;opendir:
; we want to load 5 blocks from 1024 to $1600

File diff suppressed because it is too large Load Diff

View File

@ -41,6 +41,19 @@ MASK = $2E
COLOR_MASK = $2F
COLOR = $30
; this is the structure for a ProDOS smartport command, at least
; for a read (command=1)
COMMAND = $42 ; ProDOS constant
UNIT = $43 ; ProDOS constant
ADRLO = $44 ; ProDOS constant
ADRHI = $45 ; ProDOS constant
BLOKLO = $46 ; ProDOS constant
BLOKHI = $47 ; ProDOS constant
SEEDL = $4e
SEEDH = $4f
XMAX = $50