Skip to content

Commit

Permalink
Hostless disk boot
Browse files Browse the repository at this point in the history
  • Loading branch information
MichalPleban committed Nov 25, 2017
1 parent f05b8af commit 1775236
Show file tree
Hide file tree
Showing 31 changed files with 151 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
tmp/
install.bat

37 changes: 36 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ COM = dist/com/pc_tsr.com dist/com/pc_high.com dist/com/pc_debug.com
ROM = dist/rom/card.bin
MISC = dist/misc/reboot.com dist/misc/cls.com

TRACK = util/160_d80.trk util/160_d82.trk util/180_d80.trk util/180_d82.trk util/360_d80.trk util/360_d82.trk util/720_d82.trk
ONDISK = dist/prg/boot.prg $(PRG)
DISK = dist/disk/pcdos33.d82 dist/disk/pcdos33a.d80 dist/disk/pcdos33b.d80

COMMON = src/8088/include/data.asm src/8088/include/init.asm src/8088/include/int.asm src/8088/include/ipc.asm src/8088/include/version.asm
INSTALL = src/8088/include/install.asm
DEBUG = src/8088/include/debug.asm

all: $(PRG) $(COM) $(ROM) $(MISC)
all: $(PRG) $(COM) $(ROM) $(MISC) $(TRACK) $(DISK)

dist/prg/8088.prg: src/8088/ipc.asm $(COMMON) $(INSTALL)
nasm src/8088/ipc.asm -o dist/prg/8088.prg
Expand All @@ -33,3 +37,34 @@ dist/misc/reboot.com: src/misc/reboot.asm

dist/misc/cls.com: src/misc/cls.asm
nasm src/misc/cls.asm -o dist/misc/cls.com

util/160_d80.trk: src/track/160_d80.trk $(ONDISK)
util/insert.pl src/track/160_d80.trk util/160_d80.trk $(ONDISK)

util/160_d82.trk: src/track/160_d82.trk $(ONDISK)
util/insert.pl src/track/160_d82.trk util/160_d82.trk $(ONDISK)

util/180_d80.trk: src/track/180_d80.trk $(ONDISK)
util/insert.pl src/track/180_d80.trk util/180_d80.trk $(ONDISK)

util/180_d82.trk: src/track/180_d82.trk $(ONDISK)
util/insert.pl src/track/180_d82.trk util/180_d82.trk $(ONDISK)

util/360_d80.trk: src/track/360_d80.trk $(ONDISK)
util/insert.pl src/track/360_d80.trk util/360_d80.trk $(ONDISK)

util/360_d82.trk: src/track/360_d82.trk $(ONDISK)
util/insert.pl src/track/360_d82.trk util/360_d82.trk $(ONDISK)

util/720_d82.trk: src/track/720_d82.trk $(ONDISK)
util/insert.pl src/track/720_d82.trk util/720_d82.trk $(ONDISK)

dist/disk/pcdos33.d82 : util/720_d82.trk src/disk/pcdos33.img
util/imager.pl -i src/disk/pcdos33.img -o dist/disk/pcdos33.d82 -b util

dist/disk/pcdos33a.d80 : util/360_d80.trk src/disk/pcdos33a.img
util/imager.pl -i src/disk/pcdos33a.img -o dist/disk/pcdos33a.d80 -b util

dist/disk/pcdos33b.d80 : util/360_d80.trk src/disk/pcdos33b.img
util/imager.pl -i src/disk/pcdos33b.img -o dist/disk/pcdos33b.d80 -b util

Binary file modified dist/com/pc_debug.com
Binary file not shown.
Binary file modified dist/com/pc_high.com
Binary file not shown.
Binary file modified dist/com/pc_tsr.com
Binary file not shown.
Binary file modified dist/disk/pcdos33.d82
Binary file not shown.
Binary file modified dist/disk/pcdos33a.d80
Binary file not shown.
Binary file modified dist/disk/pcdos33b.d80
Binary file not shown.
Binary file modified dist/prg/8088.prg
Binary file not shown.
Binary file added dist/prg/boot.prg
Binary file not shown.
22 changes: 16 additions & 6 deletions src/8088/include/int.asm
Original file line number Diff line number Diff line change
Expand Up @@ -959,22 +959,32 @@ INT_19_Again:
call IPC_Init
; Jump to boot sector code.
call INT_19_Segments
mov si, INT_19_Banner
call Output_String
jmp 0000:7C00h
INT_19_NoSystem:
mov ax, Data_Segment
mov es, ax
push cs
pop ds
mov si, INT_19_Banner
call INT_19_Segments
mov si, INT_19_Banner1
call Output_String
call INT_16_00
cmp al, 1Bh
jne INT_19_Again
iret

INT_19_Segments:
mov ax, Data_Segment
mov es, ax
push cs
pop ds
ret
INT_19_Banner:
db "Not a system disk. Insert a system disk and press any key.", 10, 13, 0
db "The system is coming up, please wait.", 10, 13, 0

INT_19_Banner1:
db "Insert a system disk and press any key.", 10, 13, 0
; -----------------------------------------------------------------
; INT 1A - Timer functions.
Expand Down
3 changes: 2 additions & 1 deletion src/8088/ipc.asm
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ Do_Install:
call IPC_Install
call IPC_Reset
call Install_High
Do_Install1:
int 19h
hlt
jmp Do_Install1

%include 'src/8088/include/install.asm'
%include 'src/8088/include/version.asm'
Expand Down
Binary file added src/disk/pcdos33.img
Binary file not shown.
Binary file added src/disk/pcdos33a.img
Binary file not shown.
Binary file added src/disk/pcdos33b.img
Binary file not shown.
Binary file added src/track/160_d80.trk
Binary file not shown.
Binary file added src/track/160_d82.trk
Binary file not shown.
Binary file added src/track/180_d80.trk
Binary file not shown.
Binary file added src/track/180_d82.trk
Binary file not shown.
Binary file added src/track/360_d80.trk
Binary file not shown.
Binary file added src/track/360_d82.trk
Binary file not shown.
Binary file added src/track/720_d82.trk
Binary file not shown.
Binary file modified util/160_d80.trk
Binary file not shown.
Binary file modified util/160_d82.trk
Binary file not shown.
Binary file modified util/180_d80.trk
Binary file not shown.
Binary file modified util/180_d82.trk
Binary file not shown.
Binary file modified util/360_d80.trk
Binary file not shown.
Binary file modified util/360_d82.trk
Binary file not shown.
Binary file modified util/720_d82.trk
Binary file not shown.
5 changes: 2 additions & 3 deletions util/imager.pl
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@

my(%options);

getopt('ioOt', \%options);

getopt('ioOtbs', \%options);

#######################################################################################
#
Expand Down Expand Up @@ -102,7 +101,7 @@
}
else
{
$stub_file = $options{"s"} . $sep . $stub_file;
$stub_file = $options{"b"} . $sep . $stub_file;
}
}

Expand Down
94 changes: 94 additions & 0 deletions util/insert.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#!/usr/bin/perl

use strict;

use File::Basename;
use Fcntl qw(SEEK_SET);


#######################################################################################
#
# Check if the "c1541" utility is installed and all required parameters are provided.
#
#######################################################################################

die "Usage: insert.pl input_stub output_stub file1 ...\n" unless @ARGV >= 3;

my $in_file = shift @ARGV;
my $out_file = shift @ARGV;

my $tmp = `c1541 -h`;
die "The 'c1541' utility is not installed.\n" unless $tmp;


#######################################################################################
#
# Load input track data.
#
#######################################################################################

my $stub_data;

open FILE, $in_file || die "Could not load input stub file: " . $in_file . "\n";
binmode FILE;
read(FILE, $stub_data, 14849);
close FILE;

my $stub_size = length($stub_data);

die "Invalid stub file size (should be 14848 bytes).\n" unless $stub_size = 14848;


#######################################################################################
#
# Create disk image with specified track data.
#
#######################################################################################

mkdir "tmp";

open FILE, ">tmp/tmp.d82";
binmode FILE;
seek FILE, 274688, SEEK_SET;
print FILE $stub_data;
seek FILE, 1066495, SEEK_SET;
print FILE chr(0);
close FILE;


#######################################################################################
#
# Insert the files usting c1541 utility.
#
#######################################################################################

my $pc_file;
my $cbm_file;

while($pc_file = shift @ARGV)
{
$cbm_file = basename($pc_file);
$cbm_file =~s /\..*//;

system("c1541 tmp/tmp.d82 -write " . $pc_file . " " . $cbm_file);
}


#######################################################################################
#
# Extract tracks 38-39 to the output file.
#
#######################################################################################

my $in_data;

open FILE, "tmp/tmp.d82";
binmode FILE;
seek FILE, 274688, SEEK_SET;
read(FILE, $in_data, 14848);
close FILE;

open FILE, ">" . $out_file;
binmode FILE;
print FILE $in_data;
close FILE;

0 comments on commit 1775236

Please sign in to comment.