Yikes, lots of errors on the compile. Cluso's version from 16 hours ago compiled with no errors.
C:\Propeller\zicog92\Heater 19 08 09>bstc -e -Ox zicog_demo.spin
Brads Spin Tool Compiler v0.15.3 - Copyright 2008,2009 All rights reserved
Compiled for i386 Win32 at 08:17:48 on 2009/07/20
Loading Object zicog_demo
Loading Object zicog
zicog - Error at (285,34) Symbol not defined!
call #read_memory_byte 'Read the instruction
byte there
_________________________________^
zicog - Error at (369,34) Symbol not defined!
get_memory_addr call #read_memory_byte
_________________________________^
zicog - Error at (447,33) Symbol not defined!
call #read_memory_byte
________________________________^
zicog - Error at (547,34) Symbol not defined!
call #write_memory_byte
_________________________________^
zicog - Error at (552,34) Symbol not defined!
call #read_memory_byte
_________________________________^
zicog - Error at (630,34) Symbol not defined!
put_memory_addr call #write_memory_byte
_________________________________^
zicog - Error at (769,34) Symbol not defined!
read_memory_word call #read_memory_byte 'Read the low byte
_________________________________^
zicog - Error at (773,34) Symbol not defined!
call #read_memory_byte 'Read the high byte
_________________________________^
zicog - Error at (780,34) Symbol not defined!
call #write_memory_byte 'Write the LOW byte
_________________________________^
zicog - Error at (783,34) Symbol not defined!
call #write_memory_byte
_________________________________^
zicog - Error at (1125,35) Expected Spin Method, Unique Name, Assembly Condition
al, BYTE, WORD, LONG or Assembly Instruction
long $0[noparse][[/noparse]($ - OVERLAY_START) // 2] 'fill to even nu
mber of longs (REQUIRED)
__________________________________^
Compiled 1474 Lines of Code in 0.25 Seconds
C:\Propeller\zicog92\Heater 19 08 09>pause
Press any key to continue . . .
Addit: Fixed that with
#define CPU_Z80
#define TriBladeProp
and
#define hdskenable
Looks like I need 4 hard disks - off to copy drive I to J, K and L...
Heater: Here is your code back with a few of my things removed to simplify things. I moved baud to the start of the CON section with both speed options and a comment. I left #define TriBladeProp switched on. I have also put a #ifdef TriBladeProp around the #define diskboot, cpm3 and ramdisk as this is my code specific.
Great re the 137 bytes. Yes, I just fill them in each time I do a read in case they have been corrupted. I can probably disable this bit then (less code, faster and less clutter). I have put a #define fix137 in to disable code unless selected. James, can you please check this works - if it fails, uncomment #define fix137.
James: Put a #define Dr_Acula in if you like for baud and to remove the 3 sec delay waiting for the terminal at PUB Start in the demo code. Otherwise this should run for you (except hard disk) - you will need blank files for I,J,K & L - just copy DRIVE__D.DSK although I am only enabling "I" until it works for us. #define hdskenable is commented out - you could try it - only the read would work so we will require a disk image.
Heater: Perhaps you could post a zipped version of your hard disk 32MB file for us. At least we will know the file is ok.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Links to other interesting threads:
Ok, back into Cluso's code above, still no luck with getting past the hang when type 'I:'
tried the 137 patch on and off. Maybe my disk image is not right. Using a clone of drive D
Also, the bootup is much slower than heater's version. Not sure why - checking it out now...
Crossed posts re the fast boot. Oh darn, I was getting to like that!
Ok, looks like Cluso and me are stuck getting 'I' working. We are cloning floppy drive images. But they are 128 ones, right?
Addit: I'm using the program exactly as posted at the beginning of this thread. 20k memory and all. Trying to get into drive I pauses then gives.
Write to unimplemented I/O Port &H87
Some things work though. This is the same printout for both heater and cluso's latest version (this crashed for me previously on the I/O). The bytes that are skipped eg 68 are correct ie trapped by the n8vem code. So this little program is very useful.
A>survey
*** System Survey (June 82) ***
Drive A: 480K bytes in 74 files with 392K bytes remaining
Memory map:
0 8 16 24 32 40 48 56 64
| | | | | | | | |
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTCCCBBBB
T=TPA C=CPM B=BIOS or unassigned R=ROM or bad
BIOS at F203 iobyte 00 drive 00 BDOS at E406
65535 Bytes RAM 0 Bytes ROM 58374 Bytes in TPA
0 Bytes Empty 65535 Total Active Bytes
Active I/O ports:Read from unimplemented I/O Port &H00
Read from unimplemented I/O Port &H01
01 Read from unimplemented I/O Port &H02
02 Read from unimplemented I/O Port &H03
03 Read from unimplemented I/O Port &H04
04 Read from unimplemented I/O Port &H05
05 Read from unimplemented I/O Port &H06
06 Read from unimplemented I/O Port &H07
07 08 09 0A Read from unimplemented I/O Port &H0B
0B Read from unimplemented I/O Port &H0C
0C Read from unimplemented I/O Port &H0D
0D Read from unimplemented I/O Port &H0E
0E Read from unimplemented I/O Port &H0F
0F
10 Read from unimplemented I/O Port &H12
12 Read from unimplemented I/O Port &H13
13 Read from unimplemented I/O Port &H14
14 Read from unimplemented I/O Port &H15
15 Read from unimplemented I/O Port &H16
16 Read from unimplemented I/O Port &H17
17 Read from unimplemented I/O Port &H18
18 Read from unimplemented I/O Port &H19
19 Read from unimplemented I/O Port &H1A
1A Read from unimplemented I/O Port &H1B
1B Read from unimplemented I/O Port &H1C
1C Read from unimplemented I/O Port &H1D
1D Read from unimplemented I/O Port &H1E
1E Read from unimplemented I/O Port &H1F
1F Read from unimplemented I/O Port &H20
20 Read from unimplemented I/O Port &H21
21 Read from unimplemented I/O Port &H22
22 Read from unimplemented I/O Port &H23
23 Read from unimplemented I/O Port &H24
24 Read from unimplemented I/O Port &H25
25 Read from unimplemented I/O Port &H26
26 Read from unimplemented I/O Port &H27
27 Read from unimplemented I/O Port &H28
28 Read from unimplemented I/O Port &H29
29 Read from unimplemented I/O Port &H2A
2A Read from unimplemented I/O Port &H2B
2B Read from unimplemented I/O Port &H2C
2C Read from unimplemented I/O Port &H2D
2D Read from unimplemented I/O Port &H2E
2E Read from unimplemented I/O Port &H2F
2F Read from unimplemented I/O Port &H30
30 Read from unimplemented I/O Port &H31
31 Read from unimplemented I/O Port &H32
32 Read from unimplemented I/O Port &H33
33 Read from unimplemented I/O Port &H34
34 Read from unimplemented I/O Port &H35
35 Read from unimplemented I/O Port &H36
36 Read from unimplemented I/O Port &H37
37 Read from unimplemented I/O Port &H38
38 Read from unimplemented I/O Port &H39
39 Read from unimplemented I/O Port &H3A
3A Read from unimplemented I/O Port &H3B
3B Read from unimplemented I/O Port &H3C
3C Read from unimplemented I/O Port &H3D
3D Read from unimplemented I/O Port &H3E
3E Read from unimplemented I/O Port &H3F
3F Read from unimplemented I/O Port &H40
40 Read from unimplemented I/O Port &H41
41 Read from unimplemented I/O Port &H42
42 Read from unimplemented I/O Port &H43
43 Read from unimplemented I/O Port &H44
44 Read from unimplemented I/O Port &H45
45 Read from unimplemented I/O Port &H46
46 Read from unimplemented I/O Port &H47
47 Read from unimplemented I/O Port &H48
48 Read from unimplemented I/O Port &H49
49 Read from unimplemented I/O Port &H4A
4A Read from unimplemented I/O Port &H4B
4B Read from unimplemented I/O Port &H4C
4C Read from unimplemented I/O Port &H4D
4D Read from unimplemented I/O Port &H4E
4E Read from unimplemented I/O Port &H4F
4F Read from unimplemented I/O Port &H50
50 Read from unimplemented I/O Port &H51
51 Read from unimplemented I/O Port &H52
52 Read from unimplemented I/O Port &H53
53 Read from unimplemented I/O Port &H54
54 Read from unimplemented I/O Port &H55
55 Read from unimplemented I/O Port &H56
56 Read from unimplemented I/O Port &H57
57 Read from unimplemented I/O Port &H58
58 Read from unimplemented I/O Port &H59
59 Read from unimplemented I/O Port &H5A
5A Read from unimplemented I/O Port &H5B
5B Read from unimplemented I/O Port &H5C
5C Read from unimplemented I/O Port &H5D
5D Read from unimplemented I/O Port &H5E
5E Read from unimplemented I/O Port &H5F
5F Read from unimplemented I/O Port &H60
60 Read from unimplemented I/O Port &H61
61 Read from unimplemented I/O Port &H62
62 Read from unimplemented I/O Port &H63
63 Read from unimplemented I/O Port &H64
64 Read from unimplemented I/O Port &H65
65 Read from unimplemented I/O Port &H66
66 Read from unimplemented I/O Port &H67
67 68 Read from unimplemented I/O Port &H69
69 Read from unimplemented I/O Port &H6A
6A Read from unimplemented I/O Port &H6B
6B Read from unimplemented I/O Port &H6C
6C 6D Read from unimplemented I/O Port &H6E
6E Read from unimplemented I/O Port &H6F
6F Read from unimplemented I/O Port &H70
70 Read from unimplemented I/O Port &H71
71 Read from unimplemented I/O Port &H72
72 Read from unimplemented I/O Port &H73
73 Read from unimplemented I/O Port &H74
74 Read from unimplemented I/O Port &H75
75 Read from unimplemented I/O Port &H76
76 Read from unimplemented I/O Port &H77
77 Read from unimplemented I/O Port &H78
78 Read from unimplemented I/O Port &H79
79 Read from unimplemented I/O Port &H7A
7A Read from unimplemented I/O Port &H7B
7B Read from unimplemented I/O Port &H7C
7C Read from unimplemented I/O Port &H7D
7D Read from unimplemented I/O Port &H7E
7E Read from unimplemented I/O Port &H7F
7F Read from unimplemented I/O Port &H80
80 Read from unimplemented I/O Port &H81
81 Read from unimplemented I/O Port &H82
82 Read from unimplemented I/O Port &H83
83 Read from unimplemented I/O Port &H84
84 Read from unimplemented I/O Port &H85
85 Read from unimplemented I/O Port &H86
86 Read from unimplemented I/O Port &H87
87 Read from unimplemented I/O Port &H88
88 Read from unimplemented I/O Port &H89
89 Read from unimplemented I/O Port &H8A
8A Read from unimplemented I/O Port &H8B
8B Read from unimplemented I/O Port &H8C
8C Read from unimplemented I/O Port &H8D
8D Read from unimplemented I/O Port &H8E
8E Read from unimplemented I/O Port &H8F
8F Read from unimplemented I/O Port &H90
90 Read from unimplemented I/O Port &H91
91 Read from unimplemented I/O Port &H92
92 Read from unimplemented I/O Port &H93
93 Read from unimplemented I/O Port &H94
94 Read from unimplemented I/O Port &H95
95 Read from unimplemented I/O Port &H96
96 Read from unimplemented I/O Port &H97
97 Read from unimplemented I/O Port &H98
98 Read from unimplemented I/O Port &H99
99 Read from unimplemented I/O Port &H9A
9A Read from unimplemented I/O Port &H9B
9B Read from unimplemented I/O Port &H9C
9C Read from unimplemented I/O Port &H9D
9D Read from unimplemented I/O Port &H9E
9E Read from unimplemented I/O Port &H9F
9F Read from unimplemented I/O Port &HA0
A0 Read from unimplemented I/O Port &HA1
A1 Read from unimplemented I/O Port &HA2
A2 Read from unimplemented I/O Port &HA3
A3 Read from unimplemented I/O Port &HA4
A4 Read from unimplemented I/O Port &HA5
A5 Read from unimplemented I/O Port &HA6
A6 Read from unimplemented I/O Port &HA7
A7 Read from unimplemented I/O Port &HA8
A8 Read from unimplemented I/O Port &HA9
A9 Read from unimplemented I/O Port &HAA
AA Read from unimplemented I/O Port &HAB
AB Read from unimplemented I/O Port &HAC
AC Read from unimplemented I/O Port &HAD
AD Read from unimplemented I/O Port &HAE
AE Read from unimplemented I/O Port &HAF
AF Read from unimplemented I/O Port &HB0
B0 Read from unimplemented I/O Port &HB1
B1 Read from unimplemented I/O Port &HB2
B2 Read from unimplemented I/O Port &HB3
B3 Read from unimplemented I/O Port &HB4
B4 Read from unimplemented I/O Port &HB5
B5 Read from unimplemented I/O Port &HB6
B6 Read from unimplemented I/O Port &HB7
B7 Read from unimplemented I/O Port &HB8
B8 Read from unimplemented I/O Port &HB9
B9 Read from unimplemented I/O Port &HBA
BA Read from unimplemented I/O Port &HBB
BB Read from unimplemented I/O Port &HBC
BC Read from unimplemented I/O Port &HBD
BD Read from unimplemented I/O Port &HBE
BE Read from unimplemented I/O Port &HBF
BF Read from unimplemented I/O Port &HC0
C0 Read from unimplemented I/O Port &HC1
C1 Read from unimplemented I/O Port &HC2
C2 Read from unimplemented I/O Port &HC3
C3 Read from unimplemented I/O Port &HC4
C4 Read from unimplemented I/O Port &HC5
C5 Read from unimplemented I/O Port &HC6
C6 Read from unimplemented I/O Port &HC7
C7 Read from unimplemented I/O Port &HC8
C8 Read from unimplemented I/O Port &HC9
C9 Read from unimplemented I/O Port &HCA
CA Read from unimplemented I/O Port &HCB
CB Read from unimplemented I/O Port &HCC
CC Read from unimplemented I/O Port &HCD
CD Read from unimplemented I/O Port &HCE
CE Read from unimplemented I/O Port &HCF
CF Read from unimplemented I/O Port &HD0
D0 Read from unimplemented I/O Port &HD1
D1 Read from unimplemented I/O Port &HD2
D2 Read from unimplemented I/O Port &HD3
D3 Read from unimplemented I/O Port &HD4
D4 Read from unimplemented I/O Port &HD5
D5 Read from unimplemented I/O Port &HD6
D6 Read from unimplemented I/O Port &HD7
D7 Read from unimplemented I/O Port &HD8
D8 Read from unimplemented I/O Port &HD9
D9 Read from unimplemented I/O Port &HDA
DA Read from unimplemented I/O Port &HDB
DB Read from unimplemented I/O Port &HDC
DC Read from unimplemented I/O Port &HDD
DD Read from unimplemented I/O Port &HDE
DE Read from unimplemented I/O Port &HDF
DF Read from unimplemented I/O Port &HE0
E0 Read from unimplemented I/O Port &HE1
E1 Read from unimplemented I/O Port &HE2
E2 Read from unimplemented I/O Port &HE3
E3 Read from unimplemented I/O Port &HE4
E4 Read from unimplemented I/O Port &HE5
E5 Read from unimplemented I/O Port &HE6
E6 Read from unimplemented I/O Port &HE7
E7 Read from unimplemented I/O Port &HE8
E8 Read from unimplemented I/O Port &HE9
E9 Read from unimplemented I/O Port &HEA
EA Read from unimplemented I/O Port &HEB
EB Read from unimplemented I/O Port &HEC
EC Read from unimplemented I/O Port &HED
ED Read from unimplemented I/O Port &HEE
EE Read from unimplemented I/O Port &HEF
EF Read from unimplemented I/O Port &HF0
F0 Read from unimplemented I/O Port &HF1
F1 Read from unimplemented I/O Port &HF2
F2 Read from unimplemented I/O Port &HF3
F3 Read from unimplemented I/O Port &HF4
F4 Read from unimplemented I/O Port &HF5
F5 Read from unimplemented I/O Port &HF6
F6 Read from unimplemented I/O Port &HF7
F7 Read from unimplemented I/O Port &HF8
F8 Read from unimplemented I/O Port &HF9
F9 Read from unimplemented I/O Port &HFA
FA Read from unimplemented I/O Port &HFB
FB Read from unimplemented I/O Port &HFC
FC HDSK ERROR 5
FD FE SR port read
FF
254 Ports active
A>
James: Our SD is different to heaters. He has no FAT16, just a contiguous clump of data. Secondly, the floppy will be formatted incorrectly so it will not work :-(. Need either heaters formatted file or we need to get it running blind.
From what I recall (havent had time to check) the code should read the hdisk correctly but writes should be disabled.
Can you compile with #define hdskenable commented out and see if CPM boots and reads and writes correctly? If so, I know I don't have to worry about the fudging the extra 9 bytes (128 -> 137).
I will look at the hdisk shortly
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Links to other interesting threads:
#ifdef TriBladeProp
#define fix137 'fudge in the pre and post bytes for the 137Byte SIMH sectors
#define diskboot 'boot using cleared ram and $FF00 dskboot.com
'#define RamDisk 'use Ram Disk, else SD Card for CPM disk
'#define cpm3 'Uncomment for CPM3 else CPM2.2
#endif
#define hdskenable 'Uncomment for hard disk support
is my combo at the moment. Working fine with booting and xmodem transfers. What combinations of fix137 and hdskenable would you like tested?
tried commenting out fix137. That works fine with xmodem too.
What does the fix137 do? Does it enable reading of disk images without pre-processing by the vb6 program?
'#define fix137 ' disable fudge
'#define hdskenable 'no hard disk
thanks
Sorry, fix137 just puts the extra 9 bytes into the sector buffer after a read of a 128 byte sector from the sd card (floppy). I am thinking/hoping this kludge is not required. Previously, it was always done.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Links to other interesting threads:
Re heater I have a feeling cloning a floppy does not give what we want. Sectors per track is wrong or something.
What about getting the file i.dsk that comes up in the simh in many packages? No, wait, that is 8mb and we want 32mb. Hmm, so all files need some sort of pre-processing.
Yes - this combo works too with xmodem etc
#ifdef TriBladeProp
'#define fix137 'fudge in the pre and post bytes for the 137Byte SIMH sectors
#define diskboot 'boot using cleared ram and $FF00 dskboot.com
'#define RamDisk 'use Ram Disk, else SD Card for CPM disk
'#define cpm3 'Uncomment for CPM3 else CPM2.2
#endif
'#define hdskenable 'Uncomment for hard disk support
I'm looking at a simh i.dsk at the moment. Has a few files on it. Seems to be 128 bytes as they all line up neatly when viewed in groups of 16. E5 to 5FFF. Then filenames, then lots of E5s to DFFF. Then the data starts at E000.
James: You should be able to make a file with the VB6 program I sent. Just remove the section to skip the 9 bytes and all will work fine - IIRC there are 4 at the start and 5 at the end. This will be in the reading section. VB will read any length file < 32MB but outputs a fixed zero filled 32MB file.
If not email me the file and I will create it.
What you are seeing is the FAT style structure (whatever they used)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Links to other interesting threads:
You just have to stretch it. 128 bytes into 512. I thought you had some VB program that did that for you.
Or you can use the mk_zicog_img.py program that is included in the last ZiCog release.
You would have to hack it a bit as not to put the 8 floppy images into the output file. Python is easy to read.
I'd make the disk myself for you but I'm away from home at the moment.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
Yes, working on that approach. vb6 code to make a blank 32mb file and fill it with E5.
Private Sub Blank32E5()
Dim FileNo As Integer
Dim FileName As String
Dim FileSize As String
Dim i, j As Long
Dim bytes() As Byte
' clear the output buffer
txtStatus.Text = "Clearing 32MB buffer"
txtStatus.Refresh
FileSize = 33554432 ' 32MBytes
ReDim bytes(0 To FileSize - 1)
For j = 0 To FileSize - 1
bytes(j) = &HE5
Next j
FileName = "HARD_E5.DSK"
txtStatus.Text = "Opening..." & FileName
txtStatus.Refresh
FileNo = FreeFile
Open FileName For Binary As FileNo
Put FileNo, , bytes ' writes complete binary file
Close FileNo
txtStatus.Text = FileName & " Saved"
txtStatus.Refresh
End Sub
Then rename it as DRIVE__B.DSK, overwrite the old file and indeed it comes up with no files as a floppy drive. Then tried copying MBASIC over with PIP and that works too. It is a bit cheeky just filling a file up with E5 but someone suggested it recently over on the vintage computer forum.
So, will this work for drive I? So far, no luck. It still just hangs when going to drive I. But that is with Cluso's code. I'm going to try yours in a sec.
Addit - same result - just hangs. So I guess need to trace what happens when you type I:
Post Edited (Dr_Acula) : 8/19/2009 10:11:33 AM GMT
I don't think there is one, or at least there might be an empty one that comes with the cpm2 download.
But either way, if you don't have one and SIMH is configured to use one, then it will create a blank I: disk for you automatically when you start CP/M 2.
I forget now if having an I: disk is the default configuration or if you have to tweek the cpm2 command file.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
Below is the content of my cpm2 command file for altairz80, you need to have the line "attach hdsk0 i.dsk" in yours.
Probably ignore the rest of it.
d tracks[noparse][[/noparse]0-7] 254
attach dsk0 cpm2.dsk
attach dsk1 app.dsk
attach hdsk0 i.dsk
;demo how to use other disk formats in CP/M 2
attach hdsk1 appleiicpm.dsk
set hdsk1 format=apple-d2
set cpu 19k
set cpu noitrap
set cpu z80
set cpu altairrom
set cpu nonbanked
reset cpu
set sio ansi
set sio nosleep
boot dsk
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
Yes very similar to mine. Just the size of memory is different
d tracks[noparse][[/noparse]0-7] 254
attach dsk cpm2.dsk
attach dsk1 basic.dsk
attach dsk2 games.dsk
attach dsk3 sbasic.dsk
attach dsk4 bdsc160.dsk
attach dsk5 tools.dsk
attach dsk6 wordstar.dsk
attach hdsk i.dsk
set cpu 64k
set cpu noitrap
set cpu z80
set cpu altairrom
set cpu nonbanked
reset cpu
set sio ansi
set sio nosleep
boot dsk
bye
That sits in a program called all and there is no extension
Then I have a batch file called AltairAll.bat which contains one line
altairz80 all
And so you can double click on AltairAll.bat and it runs the emulation.
re heater Dr_A: What's that? Is it really possible for CP/M to write a file to an unformatted floppy?
This is from the FORMAT program in the N8VEM:
; Formatting the ram is simple as clearing the directory area
; to a value of E5h (the first 8k of track 1 or the ramdisk).
LD HL,$0000 ; starting memory address of track 1, sector 0 in HL
LD BC,$1FFF ; 8K of directory sectors reserved (length in BC)
LD A,$E5 ; initializing value in A
ld e,l ; fill memory
ld d,h
inc de
ld (hl),A
ldir
Even less E5s there, just to the first 8k. But it is simpler to fill the entire thing with E5 as then you don't have to worry about the varying size of the dpb etc.
'Formatting', in CP/M, means erasing to E5. Easy, huh?
I can also report from experience that on a N8VEM with a brand new ram chip where all the bytes are zero, you cannot read/write properly. I think E5 is used as the 'end of filename list' marker, so if there is no E5 then it keeps trying to read filenames where they don't exist.
This is a fragment of CP/M code:
CALL FCB2HL ; YES, GET ITS ADDRESS.
LD A,0E5H
CP (HL) ; EMPTY FILE ENTRY?
Post Edited (Dr_Acula) : 8/19/2009 10:36:08 AM GMT
Yes that looks right Cluso. Viewed that as a binary file. First 128 bytes of 512 are E5. Rest are zero but you never read them, so it is the same as 32mb of E5.
I am only reading 128 bytes where I think heater you are reading the 512 bytes. Is it possible that the sectors on your disk is still 137 ??? If so, I need to offset like I do in the floppy reads.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Links to other interesting threads:
Comments
Downloading the new code now...
And I think it should be 115k - no need for everyone to be slow just coz of my setup.
C:\Propeller\zicog92\Heater 19 08 09>bstc -e -Ox zicog_demo.spin
Brads Spin Tool Compiler v0.15.3 - Copyright 2008,2009 All rights reserved
Compiled for i386 Win32 at 08:17:48 on 2009/07/20
Loading Object zicog_demo
Loading Object zicog
zicog - Error at (285,34) Symbol not defined!
call #read_memory_byte 'Read the instruction
byte there
_________________________________^
zicog - Error at (369,34) Symbol not defined!
get_memory_addr call #read_memory_byte
_________________________________^
zicog - Error at (447,33) Symbol not defined!
call #read_memory_byte
________________________________^
zicog - Error at (547,34) Symbol not defined!
call #write_memory_byte
_________________________________^
zicog - Error at (552,34) Symbol not defined!
call #read_memory_byte
_________________________________^
zicog - Error at (630,34) Symbol not defined!
put_memory_addr call #write_memory_byte
_________________________________^
zicog - Error at (769,34) Symbol not defined!
read_memory_word call #read_memory_byte 'Read the low byte
_________________________________^
zicog - Error at (773,34) Symbol not defined!
call #read_memory_byte 'Read the high byte
_________________________________^
zicog - Error at (780,34) Symbol not defined!
call #write_memory_byte 'Write the LOW byte
_________________________________^
zicog - Error at (783,34) Symbol not defined!
call #write_memory_byte
_________________________________^
zicog - Error at (1125,35) Expected Spin Method, Unique Name, Assembly Condition
al, BYTE, WORD, LONG or Assembly Instruction
long $0[noparse][[/noparse]($ - OVERLAY_START) // 2] 'fill to even nu
mber of longs (REQUIRED)
__________________________________^
Compiled 1474 Lines of Code in 0.25 Seconds
C:\Propeller\zicog92\Heater 19 08 09>pause
Press any key to continue . . .
Addit: Fixed that with
#define CPU_Z80
#define TriBladeProp
and
#define hdskenable
Looks like I need 4 hard disks - off to copy drive I to J, K and L...
Post Edited (Dr_Acula) : 8/19/2009 7:43:49 AM GMT
Great re the 137 bytes. Yes, I just fill them in each time I do a read in case they have been corrupted. I can probably disable this bit then (less code, faster and less clutter). I have put a #define fix137 in to disable code unless selected. James, can you please check this works - if it fails, uncomment #define fix137.
James: Put a #define Dr_Acula in if you like for baud and to remove the 3 sec delay waiting for the terminal at PUB Start in the demo code. Otherwise this should run for you (except hard disk) - you will need blank files for I,J,K & L - just copy DRIVE__D.DSK although I am only enabling "I" until it works for us. #define hdskenable is commented out - you could try it - only the read would work so we will require a disk image.
Heater: Perhaps you could post a zipped version of your hard disk 32MB file for us. At least we will know the file is ok.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
BTW, the bootup is 10x faster now with CP/M included. I *like* that!
Getting a hang on drive I (which is a clone of drive D) Working through solutions now...
You don't want that fast boot. It means you are ending up in the 23K RAM CP/M version carried in the zicog_demo.spin and running from HUB memory!!!
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
tried the 137 patch on and off. Maybe my disk image is not right. Using a clone of drive D
Also, the bootup is much slower than heater's version. Not sure why - checking it out now...
Ok, looks like Cluso and me are stuck getting 'I' working. We are cloning floppy drive images. But they are 128 ones, right?
Addit: I'm using the program exactly as posted at the beginning of this thread. 20k memory and all. Trying to get into drive I pauses then gives.
Write to unimplemented I/O Port &H87
Some things work though. This is the same printout for both heater and cluso's latest version (this crashed for me previously on the I/O). The bytes that are skipped eg 68 are correct ie trapped by the n8vem code. So this little program is very useful.
Post Edited (Dr_Acula) : 8/19/2009 8:32:20 AM GMT
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
From what I recall (havent had time to check) the code should read the hdisk correctly but writes should be disabled.
Can you compile with #define hdskenable commented out and see if CPM boots and reads and writes correctly? If so, I know I don't have to worry about the fudging the extra 9 bytes (128 -> 137).
I will look at the hdisk shortly
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
#define fix137 'fudge in the pre and post bytes for the 137Byte SIMH sectors
#define diskboot 'boot using cleared ram and $FF00 dskboot.com
'#define RamDisk 'use Ram Disk, else SD Card for CPM disk
'#define cpm3 'Uncomment for CPM3 else CPM2.2
#endif
#define hdskenable 'Uncomment for hard disk support
is my combo at the moment. Working fine with booting and xmodem transfers. What combinations of fix137 and hdskenable would you like tested?
tried commenting out fix137. That works fine with xmodem too.
What does the fix137 do? Does it enable reading of disk images without pre-processing by the vb6 program?
Post Edited (Dr_Acula) : 8/19/2009 8:48:46 AM GMT
'#define hdskenable 'no hard disk
thanks
Sorry, fix137 just puts the extra 9 bytes into the sector buffer after a read of a 128 byte sector from the sd card (floppy). I am thinking/hoping this kludge is not required. Previously, it was always done.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
Post Edited (Cluso99) : 8/19/2009 8:58:11 AM GMT
What about getting the file i.dsk that comes up in the simh in many packages? No, wait, that is 8mb and we want 32mb. Hmm, so all files need some sort of pre-processing.
Yes - this combo works too with xmodem etc
#ifdef TriBladeProp
'#define fix137 'fudge in the pre and post bytes for the 137Byte SIMH sectors
#define diskboot 'boot using cleared ram and $FF00 dskboot.com
'#define RamDisk 'use Ram Disk, else SD Card for CPM disk
'#define cpm3 'Uncomment for CPM3 else CPM2.2
#endif
'#define hdskenable 'Uncomment for hard disk support
Post Edited (Dr_Acula) : 8/19/2009 8:56:08 AM GMT
If not email me the file and I will create it.
What you are seeing is the FAT style structure (whatever they used)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
You just have to stretch it. 128 bytes into 512. I thought you had some VB program that did that for you.
Or you can use the mk_zicog_img.py program that is included in the last ZiCog release.
You would have to hack it a bit as not to put the 8 floppy images into the output file. Python is easy to read.
I'd make the disk myself for you but I'm away from home at the moment.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
Then rename it as DRIVE__B.DSK, overwrite the old file and indeed it comes up with no files as a floppy drive. Then tried copying MBASIC over with PIP and that works too. It is a bit cheeky just filling a file up with E5 but someone suggested it recently over on the vintage computer forum.
So, will this work for drive I? So far, no luck. It still just hangs when going to drive I. But that is with Cluso's code. I'm going to try yours in a sec.
Addit - same result - just hangs. So I guess need to trace what happens when you type I:
Post Edited (Dr_Acula) : 8/19/2009 10:11:33 AM GMT
http://www.schorn.ch/cpm/intro.php
go down to cpm2.2 get the package, and i.dsk is part of that package.
But either way, if you don't have one and SIMH is configured to use one, then it will create a blank I: disk for you automatically when you start CP/M 2.
I forget now if having an I: disk is the default configuration or if you have to tweek the cpm2 command file.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
Below is the content of my cpm2 command file for altairz80, you need to have the line "attach hdsk0 i.dsk" in yours.
Probably ignore the rest of it.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
That sits in a program called all and there is no extension
Then I have a batch file called AltairAll.bat which contains one line
altairz80 all
And so you can double click on AltairAll.bat and it runs the emulation.
I guess it is over to the Great Cluso now?
This is from the FORMAT program in the N8VEM:
Even less E5s there, just to the first 8k. But it is simpler to fill the entire thing with E5 as then you don't have to worry about the varying size of the dpb etc.
'Formatting', in CP/M, means erasing to E5. Easy, huh?
I can also report from experience that on a N8VEM with a brand new ram chip where all the bytes are zero, you cannot read/write properly. I think E5 is used as the 'end of filename list' marker, so if there is no E5 then it keeps trying to read filenames where they don't exist.
This is a fragment of CP/M code:
Post Edited (Dr_Acula) : 8/19/2009 10:36:08 AM GMT
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
Ok, so how do we talk to this?
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBladeProp, RamBlade, TwinBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: Micros eg Altair, and Terminals eg VT100 (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm