Page 1 of 1
Hexdos 4.0 disk image
Posted: Sat May 16, 2015 8:55 pm
by bxdanny
I assembled the source code for Hexdos 4.0 that Dave the Administrator posted at Github, and created a working diskette image, which is attached, along with a description of the process used and the required copyright notice. I wanted to also include a scan I made of the printed manual, but it is too big to fit as an attachment to a post here, so I will have to find another way.
Re: Hexdos 4.0 Manual
Posted: Sat May 16, 2015 8:58 pm
by bxdanny
I rescanned the manual as monochrome (with just the front cover still grayscale, because it contains gray) and it came out good, but is still too big to post here. So I uploaded it to the public folder on my Dropbox account. You can get it here:
https://dl.dropboxusercontent.com/u/258 ... Manual.pdf
Re: Hexdos 4.0 disk image
Posted: Sun May 17, 2015 4:10 am
by BillO
Nice work!
What assembler did you use?
Re: Hexdos 4.0 disk image
Posted: Wed May 20, 2015 2:20 pm
by bxdanny
Bill:
As described in the text file within the download, it was assembled using the OS-65D assembler, running under WinOSI. Slow, but it worked. The source code intended for use with A65 on the PC doesn't work, because the way the .BYTE directive is used is not compatible with A65 syntax.
--Danny
Re: Hexdos 4.0 disk image
Posted: Fri May 22, 2015 1:27 pm
by BillO
Hi Danny,
I was working on that before life caught up to me. A few emergencies, vacations and household projects can sure throw a wrench into things like this.
I'm not sure when I'll get back to it, but the result will be put up on Github. I do have a work copy that I got compiled with A65 or the Kowalski 6502 emulator ( but not both

). Those strange byte assignments that were done to accommodate the older assembler like these:
Code: Select all
JSR MOVE ; Pick up the Basic cold start code, then modify and run
.WORD $BD15,DBADDR-1
.BYTE $C2 - $16
.BYTE $23 - $16, GETVAL; Low byte
.BYTE $25 - $16
.DBYTE GETVAL ; High byte
*=*-1
.BYTE $3D - $16, USR ; Low byte
.BYTE $3F - $16
.DBYTE USR ; High byte
*=*-1
.BYTE $8C - $16,$0C
; Set up jump back to INTER after running first part of cold start
.BYTE $C2 - $16, $4C
.BYTE $C3 - $16, INTER
.BYTE $C4 - $16
.DBYTE INTER
*=*-1
.BYTE $FF
JSR DBADDR
INTER ; Second half of cold start
JSR MOVE
.WORD $BDC1, DBADDR - 1
.BYTE $139 - $C2
.BYTE $1F5 - $C2, $0C
.BYTE $124 - $C2, PROMPT; Low byte
.BYTE $126 - $C2
.DBYTE PROMPT ; High byte
*=*-1
.BYTE $12F - $C2, WARM ; Low byte
.BYTE $131 - $C2
.DBYTE WARM ; High byte
*=*-1
; Set up jump to warm start entry point after running second half
.BYTE $136 - $C2, $4C
.BYTE $137 - $C2, WARM - 4
.BYTE $138 - $C2
.DBYTE WARM - 4
*=*-1
.BYTE $FF
JSR DBADDR
; Set up Basic's workspace pointers (back up one page)
DEC $7A
DEC $C4
WARM JSR MOVE ; Warm start entry, pointed to by JMP at $0000
; Reset disk controller
.WORD FLOPUP-1,DBADDR-1
.BYTE $4D-$C
.BYTE $11-$C,$8D
.BYTE $4D-$C,$60
.BYTE $FF
LDA #4
STA FLOPIN+1
LDA #$40
STA FLOPIN
JSR DBADDR
; CLEAR DBADDR (File descriptors)
LDX #$300-DBADDR
LDA #$FF
STA DBADDR-1,X
DEX
BNE *-4
STX TRACK
DEX
TXS
; Patch in real-time clock
JSR MOVE
.WORD PZERO-1,$DF
.BYTE $EF-$E0
.BYTE $130-$E0,$4C
.BYTE $131-$E0,SECOND
.BYTE $132-$E0
.DBYTE SECOND
*=*-1
.BYTE $FF
Were changed like this:
Code: Select all
JSR MOVE ; Pick up the Basic cold start code, then modify and run
.WORD $BD15, DBADDR-1
.BYTE $C2 - $16
.BYTE $23 - $16, <GETVAL ; Low byte
.BYTE $25 - $16, >GETVAL ; High byte
.BYTE $3D - $16, <USR ; Low byte
.BYTE $3F - $16, >USR ; High byte
.BYTE $8C - $16, $0C
; Set up jump back to INTER after running first part of cold start
.BYTE $C2 - $16, $4C
.BYTE $C3 - $16, <INTER
.BYTE $C4 - $16, >INTER
.BYTE $FF
JSR DBADDR
INTER ; Second half of cold start
JSR MOVE
.WORD $BDC1, DBADDR - 1
.BYTE $139 - $C2
.BYTE $f5 - $C2, $0C
.BYTE $124 - $C2, <PROMPT ; Low byte
.BYTE $126 - $Cc, >PROMPT ; High byte
.BYTE $12F - $C2, <WARM ; Low byte
.BYTE $131 - $C2, >WARM ; High byte
WM4 = WARM - 4
; Set up jump to warm start entry point after running second half
.BYTE $136 - $C2, $4C
.BYTE $137 - $C2, <WM4
.BYTE $138 - $C2, >WM4
.BYTE $FF
JSR DBADDR
; Set up Basic's workspace pointers (back up one page)
DEC $7A
DEC $C4
WARM JSR MOVE ; Warm start entry, pointed to by JMP at $0000
; Reset disk controller
.WORD FLOPUP-1,DBADDR-1
.BYTE $4D-$C
.BYTE $11-$C,$8D
.BYTE $4D-$C,$60
.BYTE $FF
LDA #4
STA FLOPIN+1
LDA #$40
STA FLOPIN
JSR DBADDR
; CLEAR DBADDR (File descriptors)
LDX #$300-DBADDR
LDA #$FF
STA DBADDR-1,X
DEX
BNE *-4
STX TRACK
DEX
TXS
; Patch in real-time clock
JSR MOVE
.WORD PZERO-1,$DF
.BYTE $EF-$E0
.BYTE $130-$E0,$4C
.BYTE $131-$E0, <SECOND
.BYTE $132-$E0
.BYTE >SECOND
.BYTE $FF