CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ] [ Datenschutzerklärung ]

CP/M-Forum » Tips und Links » Sepia » Threadansicht

Autor Thread - Seiten: [ 1 ] [ 2 ] -3- [ 4 ] [ 5 ]
050
06.01.2013, 14:53 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Michael

Schönen Dank. Das Problem ist aber, dass ich kein Floppy habe. Tillmann hat sein GIDE-Projekt leider nur für CPM3 gelöst, so dass ich hier auch nicht weiter komme. Die S100-Lösung ist nur mit dem 8255 ansprechbar und somit inkompatibel - Ergo auch nicht verwendbar. Was mache ich nun?

Heinrich

Hier habe ich die I/O-Map, die ich für CPM2.2 anpassen muss:

; IDE CF/Card- Interface
; Karte sollte nach Möglichkeit immer vorhanden sein
;
; Bereich: IDE0 70-7Fh
;
; Fest:
; IDE-Interface 0 0070 - 007F Standard IDE: CF oder zwei HDDs als Master und Slave
; Adresszuweisung über DIP-Schalter 1 = OFF, 2 = ON
;
; 0070 D0...D7 Data Port I/O
; 0071 Error-Status lesen
; 0072 Sektorzähler 0..255
; 0073 Sektornummer 0..255
; 0074 Cylinder low 0..255
; 0075 Cylinder high 0..255
; 0076 CHS: Master(A0), Slave(B0) + Head
; 0077 Kommando schreiben / Status lesen
; 0078 D8...D15 Data Port I/O
; 0079 zbV. -
; 007A zbV. -
; 007B zbV. -
; 007C zbV. -
; 007D zbV. -
;
; 007F lesen:
; BIT0 = IDE-Kartenerkennung 0 = Karte da
; BIT1 = Laufwerks-LED Master lesen
; BIT2 = Laufwerks-LED Slave lesen
; BIT3 = DIP-Schalter Nr. 3 lesen
; BIT4 = DIP-Schalter Nr. 4 lesen
; BIT5 = HDD-Interrupt HDD-Signal
; BIT6 = PDIAG HDD-Signal
; Bit7 = IORDY HDD-Signal
; oder
; 007F schreibe OUT,0 für IDE-Karten-Reset
; (+Rücksetzen aller int. CPLD Flip-Flops)
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 06.01.2013 um 14:56 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
051
06.01.2013, 16:32 Uhr
m.haardt



Das war ja auch nur ein Beispiel, damit Du siehst, wie sowas aussehen könnte. Du musst sowas nun für Deine Hardware schreiben, z.B. indem Du die Funktion zum Laden eines Sektors, die Du schon für den Monitor geschrieben hast, einbaust.

Für verschiedene Interfaces (8255 vs. Deine CPLD-basierte Hardware) schreibst Du verschiedene Bootsektoren.

Bei CP/M 3 geht das etwas anders. Da steht in den Systemspuren nicht mehr das System selbst, sondern CPMLDR. Das ist ein kleines Programm zusammen mit einem abgemagerten CP/M mit BDOS und BIOS, welches nur enthält, was man zum Lesen von Dateien braucht. CP/M selbst wird in einer Datei gespeichert. Der Bootsektor sieht nicht anders aus: Er muss wissen, wieviele Sektoren aus den Systemspuren geladen werden müssen, wo die Daten hin sollen und den Einsprungpunkt kennen.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
052
06.01.2013, 16:33 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
hier mal die Quellen der Epromfloppy (Bios) für den Monitor sind es nur ein paar Zeilen...allerdings ist die Epromfloppy auch CPM conform.
Schau dir doch einmal die HIDE.MAC von meinem Bios an...evtl kann man deine Schnittstelle da einbauen.
Gruß
Hans-Werner
@Michael,
Ich glaube Heinrich hat die gleichen Probleme wie ich...
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
053
06.01.2013, 17:03 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo ihr Beiden

Das ist nett, dass Ihr mir helfen wollt. Ich hoffe, dass sich das Problem irgendwie auflösen lässt- wäre sonst sehr schade. D.h. also, dass im Bootsektor nur eine Art Adresstabelle + (nach-)Loader steht, wohin CPP BDOS und BIOS hochgeladen werden, plus ein Startvector (zum CCP?) enthalten ist. Verstehe ich das so richtig?

@ Hans-Werner
Ich kann Dir auch eine IDE-Leerplatine + prog. CPLD recht günstig anbieten. Es nutzt Dir nur im Moment nicht viel, da das CP/M2.2 Boot-Problem nicht gelöst ist.

P.S. Das HIDE.mac hab ich mir angesehen. Leider 8255. Die Routinen habe ich jedoch schon für meine IDE-Karte angepasst, sonst würde ja auch das Advanced-BASIC nicht funktonieren. Dort sind ja schon Befehle wie SAVE, LOAD, DIR, DUMP... enthalten. Jedoch alles nicht FAT-orientiert.

Gruß, Heinrich
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 06.01.2013 um 17:14 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
054
06.01.2013, 19:52 Uhr
hschuetz

Avatar von hschuetz

Hallo Heinrich,
das Angebot würde ich schon gern annehmen...evtl. bekomme ich das bei mir zum Laufen...
Gruß
Hans-Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
055
11.01.2013, 20:07 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Hans-Werner

Hatte ich ganz vergessen: Die ZIDE-Karte kannst Du von 70h..7Fh auf 80..8Fh mit DIP-SW1 = ON umschalten. Dann müsste Floppy wieder gehen (wenn es an der Adresslage gelegen hat). Der Quellcode muss dann in der IDE-Zuweisung

ZIDE: equ 080h

lauten.

Gruß
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
056
29.01.2013, 01:00 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo, ich brauche leider nochmal Nachhilfe

Meine Binärdateien sind jetzt wie folgt assembliert:
BIOS: EA00 ... FBFFh
BDOS: DC00 ... E9FFh
CCP: D400 ... DBFFh

Wie bekomme ich jetzt damit ein laufendes System generiert?

CPP + BDOS müssten irgendwie auf die CF-Karte und ein Urlader diese in den Memory schieben - soweit ist das klar. Doch wie speichere ich diesen Code zum ersten mal auf die CF, wenn noch gar kein Dateisystem exsistiert und FAT16 nicht geht? Soweit ich das verstanden habe, legt CP/M nicht als FAT ab sondern sektororientiert. Kann mir bitte Jemand einen Tip geben?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
057
29.01.2013, 19:24 Uhr
m.haardt



Dafür gibt es die Systemspuren. Den Platz lässt das Dateisystem in Frieden, sein Inhalt muss nur vom Bootloader verstanden werden. Typischerweise steht im ersten Sektor der ersten Spur ein Bootloader, der vom ROM ins RAM geladen und gestartet wird. Der lädt dann die weiteren Sektoren ins RAM, d.h. bei Dir ab D400.

Du meintest, dass Dein Monitor Code seriell laden und auf die CF-Karte schreiben kann. So schreibst Du also Bootloader, CCP, BDOS und BIOS Sektor für Sektor darauf und das war's. Sowie CP/M selbst läuft, macht man das mit SYSGEN.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
058
29.01.2013, 20:16 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Michael

Ich versuche gerade ein SYS.BIN zu binden (wenn es mein Assembler zulässt), wo alle Adressen von der Lage her schon übereinstimmen > also D400...FBFFh. Im zweiten Schritt würde ich dann ein Ladeprogramm fürs EPROM schreiben, das den gesamten SYS-Inhalt nach "oben" kopiert. Dann stünden CPP, BDOS und BIOS am rechten Platz im SRAM, so dass ich über den BIOS-Einsprung den CCP starten kann (alles ohne CF-Karte, bzw. erst mal aus dem EPROM heraus). Wäre dies aus Deiner Sicht auch eine machbare Variante, das System zu etablieren, ohne einen Bootloader für die CF-Karte zu schreiben?

Gruss, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
059
29.01.2013, 21:41 Uhr
m.haardt



Ja, klar, so geht es auch. Du musst nur ab Adresse 0 RAM haben, wenn Du CP/M startest.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
060
29.01.2013, 23:09 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Michael

Hurra, ein erster Erfolg ! Promt kommt mit:

CP/M 2.2 Rev. 1.0
A0>

Die Tastatureingabe ist noch um ein Zeichen verschleppt. D.h. das ich das erste Zeichen, was ich gerade eintippe, nicht zu sehen ist. Erst wenn das nächste Zeichen kommt, doch dann ist das, was ich gerade eintippe wieder nicht da. Hast Du noch einen Tip für mich?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
061
30.01.2013, 01:18 Uhr
Hein_Ko

Avatar von Hein_Ko

Habe den Fehler gefunden. In CSTAT wurde das falsche Status-Register eingelesen. Somit waren das Zeichen von der seriellen COM erst valid, wenn ein zweites Zeichen in den Buffer kam.

Für alle, die einen 16C550 betreiben:
;......................................................
CONSTA: EQU 15h ; Rx/Tx/Status-Port COM1
FALSE: EQU 0
TRUE: EQU 0FFh

CSTS: ; Einsprung
const:
IN A,(CONSTA) ; (lsr1) Zeichen im RX Buffer?
BIT 0,A ; 1 = Zeichen da ?
JR NZ, CSTSYES ;
JR Z, CSTSNON ;
; ...
CSTSNON:
LD A,FALSE ; Buffer ist noch leer, AKKU = 0
RET

CSTSYES:
LD A,TRUE ; Zeichen da, dann AKKU = FFh
RET

Nun mache ich mich an die IDE ran ;-)
Grüße in die Runde
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
062
30.01.2013, 19:36 Uhr
m.haardt



Wunderbar, Glückwunsch! Wenn man erstmal so weit ist, dass man ein System starten kann, wird alles viel einfacher.

Ich empfehle den 16C550 mit FIFOs und Hardware flow control zu betreiben. Damit können keine Zeichen mehr verloren gehen, wenn Du mit cut & paste arbeitest.

Damit Du nicht bald wieder RAM kaufen musst:

IN A,(CONSTA)
AND 1
DEC A ; 1 -> 0 und 0 -> FF
CPL ; 0 -> FF und FF -> 0
RET

Ähnlich kann man verfahren, wenn C etwas signalisiert, indem man A löscht und C von rechts hineinrotiert.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
063
30.01.2013, 20:20 Uhr
Hein_Ko

Avatar von Hein_Ko

Na ja, viel macht das "System" ja noch nicht, da alles aus dem EPROM einfach hochgeschoben wird. Somit noch kein echtes Urladen über IDE. Man kann lediglich prüfen, ob CCP und BDOS überhaupt mit dem BIOS in Kontakt treten. Alle assemblierten Teil-Dateien werden jetzt über einen "Binder" zu einer SYS zusammengestellt. Dabei muss man die Adresslagen und Einsprünge ganz genau einhalten. Soviel habe ich schon mal gelernt ;-)

Deine Variante ist natürlich eleganter. Für mein System nutze ich Handshake CTS, RTS sowie AFC mit 115.200 Baud. Damit geht es schön schnell, da die CPU mit 20 MHz Clock und nur einem Waitstate betrieben wird.

Hättes Du eventuell noch eine Z80 Source-Quelle für mich, um ein Format-Programm und SYSGEN für IDE zu schreiben?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
064
30.01.2013, 21:48 Uhr
m.haardt



In dem Kit, was ich hier schon früher besprach, ist ein portables SYSGEN drin, was den DPB benutzt.

Unter CP/M gibt es als Dateisystem nicht viel anzulegen. Das Verzeichnis wird mit E5 beschrieben, das war's. Ein Programm habe ich dafür nicht. Bei Datestamps wird typischerweise jeder vierte Eintrag gekennzeichnet, aber das kannst Du später immer noch machen, wenn der Rest läuft. Bei P2DOS und bei CP/M 3 ist ein INITDIR.COM dabei, was Datestamps anlegt.

Falls Du den 16C550 mit Interrupts betreiben willst: Den TX Interrupt enabled man nur, solange noch Zeichen zum Senden da sind. Beim Start muss er disabled sein und bevor man das letzte Zeichen sendet muss man ihn auch abschalten. Das machen viele Treiber falsch und murksen sich dann irgendwie zum Ziel.

20 MHz sind beim Z80 schon ziemlich flott. Da wird Turbo Pascal unglaublich fix laufen und Borland Modula-2 könnte brauchbar sein. Wieviel RAM hast Du? Perfekt wäre sowas wie 1 KB ganz oben ungebanked und ein paar 63 KB Bänke, dann wäre CP/M 3 ideal einzusetzen und man könnte auch an MP/M denken.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
065
30.01.2013, 22:30 Uhr
Hein_Ko

Avatar von Hein_Ko

Vielen Dank, das Kit schaue ich mir dann noch mal näher an. Hoffentlich sind die Routinen in Z80 und dokumentiert, sonst verliere ich schnell den Faden. Bin ehr der Hardware-Mensch.

Ja, das mit dem Interrupt kenne ich, nutze ihn aber hierbei nicht. Er ist aber am CPLD verdrahtet, so dass ich das Signal nachträglich an den Bus routen kann. Das sind die klaren Vorteile von CPLDs oder FPGAs, wenn man nicht immer gleich eine neue Leiterplattenserie auflegen will.

Ja, 20 MHz ist recht flott und lässt so manchen PC/XT/AT blass aussehen. Selbst der BASIC-Interpreter läuft damit schnell. Als Speichererweiterung nutze ich eine separate Memory-Karte mit max. 1 MB. Dabei wird auf der CPU-Karte ein DIP-Schalter umgelegt, sodass der Zugriff auf EPROM und SRAM fortan über den Bus zur MEM-Karte erfolgt. Zur Speichererweiterung habe ich 16k oberhalb von 08000h als Bank schaltbar gemacht. Hierzu gibt es eine kleine MMU mit einem prog. Segmentregister im CPLD, welche 4x 16k Pages pro Segment umschalten kann. Daraus ergibt sich insgesamt 15 Segmente a. 64k.

Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
066
02.02.2013, 19:36 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Michael und @ an die anderen Spezialisten

Ich habe nun ein System geLINKt, einen neuen Monitor geschrieben, um SYS.BIN auf Sektor 1-14h zu schreiben (ca. 10k), und einen Urlader, der ihn wieder hochläd, sowie an die richtige RAM-Stelle schreibt. Dabei wird der Start-Vector umgePatcht und das CP/M gestartet. IPL macht Meldung, Promt kommt mit A0> ... alls prima.

Die CF-Karte ist bei mir als Laufwerk B0 definiert. Bei DIR bekomme ich folgendes auf den Schirm:

B0> DIR
. : . : . : .
. : . : . : .
. : . : . : .
. : . : . : .
. : . : . : . u.s.w.
B0>

Hast Du noch einen Tip für mich, wie ich nun meine CP/M-Programme auf das System bringen kann?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 02.02.2013 um 19:38 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
067
02.02.2013, 21:09 Uhr
m.haardt



Vermutlich ist das Directory von B nicht mit E5 gefüllt. Das müsstest Du noch machen.

Für den Dateiaustausch benutzt Du entweder cpmtools oder 22disk oder so, was bei Windows als Host vermutlich eine Partitionstabelle erfordert, oder Du passt Dir kermit an und benutzt die serielle Schnittstelle. CP/M 2 hat kein standardisiertes RS232 Interface, darum muss man in kermit Funktionen einbinden, um den UART zui benutzen. CP/M 3 hat solche Funktionen schon von Hause aus, darum gibt es für CP/M 3 ein generisches kermit.

Hast Du schon mal kermit benutzt? Das ist ganz nett.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
068
02.02.2013, 21:17 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Michael

Ja, mit dem Directory kenne ich mich nicht so doll aus. Mit dem Debugger kann ich zwar alle Sektoren mit E5 füllen, doch reicht das denn schon aus, damit das BDOS ein Directory akzeptiert wenn noch keine weiteren Einträge vorhanden sind?

Wie bekomme ich denn ein erstes Programm (z.B. Move-It, Stat oder PIP...) "startbar" in den TPA, wenn mir beide Deiner aufgeführten Wege verwährt sind? Ich kann ja nicht von der Konsole aus in den TPA springen.

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
069
02.02.2013, 22:42 Uhr
m.haardt



Ja, einfach mit E5 füllen reicht aus.

Wie wäre es, wenn Du im Monitor die TPA mit PIP lädst, bevor Du CP/M startest? Dann könntest Du die TPA mit SAVE (ist in CCP eingebaut) in das File PIP.COM schreiben.

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
070
02.02.2013, 22:45 Uhr
Hein_Ko

Avatar von Hein_Ko


Zitat:
m.haardt postete
Ja, einfach mit E5 füllen reicht aus.

Wie wäre es, wenn Du im Monitor die TPA mit PIP lädst, bevor Du CP/M startest? Dann könntest Du die TPA mit SAVE (ist in CCP eingebaut) in das File PIP.COM schreiben.

Michael

Super Idee ! Mache ich. Zur Zeit erweitere ich den Monitor mit "Format" für alle Sektoren und Cylinder. Soll/muss ich alle Cylinder formatieren, oder reichen die ersten 2..3 mit jeweils allen Sektoren aus ?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
071
03.02.2013, 15:29 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Michael

Nun habe ich wieder die ganze Nacht bis morgens um 7:00 Uhr mit CPM "durchgemacht". Nach Format E5 kommen bei DIR nun keine Pünktchen mehr zurück, sondern lediglich der Promt. Doch mit dem Versuch, eine 0-Datei (mit B0> SAVE 0 TEST) ob mit/ohne .COM anzulegen, kommt leider die Fehlermeldung "No Space" zurück. Die SYS.BIN Systemspuren liegen zur Zeit auf Cylinder-Low (1), Sektor 1-15. Irgend etwas passt jedoch noch nicht zusammen. Die Formatierung erfolgt jeweils von Sektor 0(1)..62(63) auf den Cylindern 0...255 Head0. Die High-Cylinder werden aus Zeitgründen noch nicht formatiert. Leider finde ich keine Informationen, wo CPM das Direktory genau (CHS?) auf dem Datenträger anlegt oder das E5-Byte prüft. Habe ich noch was übersehen oder vergessen zu initialisieren?

Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
072
03.02.2013, 19:57 Uhr
m.haardt



Wie sieht denn der DPB aus? Haben die allocation buffers genug Platz? Zum Aufbau des FS kann ich Dir die Formatbeschreibung aus cpmtools empfehlen, die ich Dir hier als PDF abgelegt habe:

http://www.moria.de/~michael/tmp/cpm.pdf

15 Sektoren klingt nach 512 Byte Sektoren. Funktioniert das deblocking (Abbildung von logischen 128 Byte Sektoren in physikalische 512 Byte Sektoren) richtig?

Michael
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
073
03.02.2013, 20:35 Uhr
Hein_Ko

Avatar von Hein_Ko

Im Moment stehen folgende Daten im DBP
;
; 19:55 03.02.13 letzte Änderung
; 22:25 28.01.13 Version mit Laufwerk A(RAMDISK) und B(IDE0) ohne C
;

CPU Z80 ; nur mit neuem DOS-Assembler !!!
FNAME "BIOS.BIN" ; Assembler BIN-Ausgabedatei

; ===================================================================
; System Equates

MSIZE: EQU 64 ; #K of RAM in system
NBYTES: EQU 128 ; bytes per sector (RAMdrive)
CR: EQU 0dh ; carriage return
LF: EQU 0ah ; line feed

TPAORG: EQU 0100h ; 0100 TPA immer Anfang
BIAS: EQU 0A000h ; 0A600h bias to start of CCP
CCP: EQU 0D400h ; bias + 3400h = CCP ( = EA00h)
BDOS: EQU 0DC00h ; ccp+806h ; start BDOS
ORGADR: EQU 0EA00h ; ccp+1600h ; start BIOS
CPML: EQU ORGADR-CCP ; size of warm load

IOB: EQU 3 ; intel i/o byte

;ROMT: EQU 4 ; hardware toggles lower 32K RAM/ROM
; bei SEPIA anders gelöst !

BUFFTAB: EQU 0FD00h ; FD00-FE00 var. Zwischenspeicher 255 Byte ablegen

; MERKE: SYS.BIN System wird auf D400-FC00h hochgeladen

SPEND: EQU 0FFFFh ; Stack Pointer Speicherende, SP zeigt nach unten

BIOSPACE: EQU 01400h ; 15A0h max. Speichergröße für Block verschieben

; ===================================================================

;
; CP/M Linkages to BIOS
;

ORG ORGADR ; BIOS-Startadresse im SRAM
PHASE ORGADR ; Ab hier Source-Adressen relocated nach EA00h

cbios: jp boot ; cold boot Kaltstart, liegt jetzt auf EA00h - EA03h
wboote: jp wboot ; warm boot Warmstart
jp const ; console status Zeichen in - Status Bit ser. COM1 abfragen
jp conin ; console input Zeichen aus Buffer holen
jp conout ; console output Zeichen senden
jp list ; listing output Zeichen auf Drucker
jp punch ; punch output na.
jp rdr ; reader input na.
;
home: jp hme ; restore drive to trk00
seldsk: jp seld ; select drive
settrk: jp strk ; set track
setsec: jp ssec ; set sector
setdma: jp sdma ; set disk transfer address
rde: jp read ; read from disk
wre: jp write ; write to disk
jp lstst ; read LST device status
jp sectran ; translate log. to phys. sector
;
; DISK PARAMETER HEADERS FOR BDOS
;

dpbase: dw 0,0 ; disk A0> (RAM disk) nur als Dummy ohne Funktion
dw 0,0
dw dirbuf,rddub
dw csv,alv0

hd1: dw 0,0 ; disk B0> (ZIDE drive) = MASTER0 HDD/CF
dw 0,0
dw dirbuf,hd1dub
dw csv,alv1

; RAMdisk --- 8 spt 256 trks. (no chksum area ... yet)

rddub: dw 32 ; sectors/trk
db 4 ; block shift (BSH)
db 15 ; block mask (BLM)
db 0 ; extent mask (EXM)
dw 511 ; disk size (#alus-1) (DSM)
dw 255 ; max dir entries (#-1) (DRM)
db 0f0h ; dir. alloc. (AL0)
db 0 ; dir. alloc. (AL1)
dw 0 ; check size (CKS)
dw 0 ; track offset (OFF)

; IDE drive - c/h/s is 3148/16/63 (252 is one track)
; 4k allocation blocks, 1024 dir ent., ~32 MB

cpmspt: equ 252

hd1dub: dw cpmspt ; sectors/trk
db 5 ; block shift (BSH)
db 31 ; block mask (BLM)
db 1 ; extent mask (EXM)
dw 8184 ; disk size (#blocks-1) (DSM)
dw 3ffh ; max dir entries (#-1) (DRM)
db 0ffh ; dir. alloc. (AL0)
db 0 ; dir. alloc. (AL1)
dw 0 ; check size (CKS)
dw 1 ; track offset (OFF)

; .....

ide_status:
db 0 ; bit 0 = master (0) or slave (1)
; bit 1 - 0 means master not previously accessed
; bit 2 - 0 means slave not previously accessed

;......................................................
; read/write storage
;
sekdsk: ds 1
sektrk: ds 2
seksec: ds 1
;
hstdsk: ds 1
hsttrk: ds 2
hstsec: ds 2
;
sekhst: ds 1
hstact: ds 1
hstwrt: ds 1
;
unacnt: ds 1
unadsk: ds 1
unatrk: ds 2
unasec: ds 1
;
erflag: ds 1
rsflag: ds 1
readop: ds 1
wrtype: ds 1
dmaadr: ds 2
hstbuf: ds hstsiz
;

dirbuf: ds 128 ; directory scratch buffer
alv0: ds 65 ; disk allocation vectors
alv1: ds 1024 ; für erste HDD

;alv2: ds 1024 ; für zweite HDD

csv: ds 0 ; check vector scratch pad


Hmmm... Die DIR . : . : . : . Zeichen sind auch wieder da. Das Formatieren klappt irgendwie nicht.
Grüße, Heinrich
--
Es gibt keine Probleme - nur Lösungen !

Dieser Post wurde am 03.02.2013 um 20:42 Uhr von Hein_Ko editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
074
04.02.2013, 14:03 Uhr
Hein_Ko

Avatar von Hein_Ko

Zur Info
Ich bin jetzt wieder einen Schritt weiter. Testweise habe ich die Lese-Bytes der IDE-Daten/Schnittstelle zwangsweise mit LD A,0E5h im BIOS vorbelegt, um BDOS die "gelegenheit" zu ermöglichen, doch ein Directory-Space zu akzeptieren. Und siehe da, ich kann eine Datei speichern. Nun muss man schauen, wo genau das BDOS sein Directory mit CHS auf der CF-Karte anlegt, um diese Sektoren gezielt zu formatieren.

Erstmal ein großes Super-danke-schön an alle, die mir geholfen haben CP/M ein wenig besser zu verstehen. Ich melde mich wieder, wenn es läuft...

Viele Grüße in die Runde
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] -3- [ 4 ] [ 5 ]     [ Tips und Links ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek