|
|
entwickelt von Ronald Daleske |
|
|
|
z-meic = (z)80 - (m)odular (e)rweiterbare e(i)nplatinen (c)omputer
Assemblieren und Compilieren der Firmware
Die Firmware des z-meic befindet sich im Flash-Speicher des ATMEGA 32A. Der ATMEGA 32A wird programmiert (gebrannt), in dem die HEX-Datei z-meic.hex mit Hilfe eines AVR-USB-Programmers über den AVR-Programmierstecker (J1 Conn_PROMMER) übertragen wird (Erläuterungen dazu im Abschnitt "1.2. Brennen der HEX-Datei in den ATMEGA32A").
Die HEX-Datei z-meic.hex wird durch den RONPAS-Compiler aus der Pascal-Datei z-meic.pas generiert.
Die Pascal-Datei z-meic.pas ist nur die Rahmendatei und bindet eine Reihe von INCLUDE-Dateien mit ein.
Quelltext: RONPAS-Compiler, Quelldatei:
z-meic.PAS |
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
// eingebundenen CONST DISK-Arrays
// -------------------------------
// BIOS - Z80-Code
{$I MEIC_TXT.INC}
// BDOS - Z80-Code
{$I BDOS_TXT.INC}
// CCP - Z80-Code
{$I CCP_TXT.INC}
// eingebundene Programmmodule
// ---------------------------
// einige elementare Routinen wie "wait_ms"
{$I SYSTEM.INC}
// hardwarenahe Routinen fuer die serielle Schnittstelle
{$I UART_oI.INC}
// globale Routinen fuer die serielle Schnittstelle (zu UART_oI.INC)
{$I UART_PRG.INC}
// hardwarenahe Routinen fuer die SPI-Schnittstelle und den FLASH-IC W25Q64
{$I SPI_W25Q64.INC}
// hardwarenahe Routinen fuer die I2C-Schnittstelle und den FLASH-IC AT24C512
{$I I2C_AT24C512.INC}
// Routinen fuer den lokalen Flash-Manager
// (globale Routinen zu SPI_W25Q64.INC und lokaler_FLASH_Manager.INC
{$I lokaler_FLASH_Manager.INC}
// alle Routinen zu den ITP3-Schnittstellen
{$I ITP3_SRV.INC}
{$I SRAM.INC}
// globale Routinen zum managen der Geräte
// (lokalen Flash-Manager, serielle Schnittstelle, ITP3-Schnittstellen)
{$I Geraete_Manager.INC}
{$I Z80.INC}
{$I CPM_IO.INC}
|
|
Das CP/M-BIOS mit dem BIOS-Loader wird als PASCAL-Array ebenfalls über die Pascal-Datei z-meic.pas mit eingebunden.
Wie aus den mehreren Z80-Assembler Quelldateien das PASCAL-Array erzeugt wird, wird im Abschnitt "1.3. Änderung und Assemblierung des BIOS" beschrieben.
1.3. Änderung und Assemblierung des BIOS
Im Verzeichnis der Quelltexte des z-meic befindet sich im Ordner:
"RONPAS\z-meic\10_BIOS"
das Programm:
ASMEDIT.exe
Nach dem Start des Programms ASMEDIT.exe können alle relevanten Dateien zum CP/M-BIOS editiert werden.
Soll der geänderte Quelltext assembliert und in den z-meic eingebunden werden kann dies durch Drücken auf den grünen Start Botton erfolgen.
Dabei wird die Batch-Datei "a1.bat" gestartet und abgearbeitet.
Quelldatei:
a1.bat |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
echo on
color f0
mode con: cols=120 lines=400
set name=MEIC
DEL CPM_LW_A\%name%.ERL
DEL CPM_LW_A\%name%.COM
KEM80 M80 %name%.ERL,%name%.PRN=MEICBAT/M/Z
KEM80 LINKMT %name%=%name%/M/P:0000
copy CPM_LW_A\%name%.COM %name%.COM
COM2INC.exe %name%.COM %name%_TXT.INC Laenge_%name%_Array %name%_ARR CLEAR
copy %name%_TXT.INC ..\%name%_TXT.INC
pause
|
|
Es werden zuerste der CP/M-Assembler M80.COM und dann der CP/M-Linker LINKMT.COM mit den erforderlichen Parametern aufgerufen. Dafür wird der CP/M-Konsolen-Emulator KEM80.exe genutzt. Das Ergebnis ist die Datei MEIC.COM. Diese Datei enthält den BIOS-Loader (der von Adresse 0000H startet) und dem eigentlichen BIOS, das auf die Startadresse 0F000H gelinkt wurde.
Anschließend wird mit dem Konsolen-Programm COM2INC.exe die Binärdatei MEIC.COM in ein PASCAL-CONST-Array umgewandelt.
Dieses MEIC_TXT.INC PASCAL-CONST-Array wird zu den Quelltexten des z-meic hinzugefügt und bei der nächsten Übersetzung mit dem PASCAL-Compiler "RONPAS" eingebunden. Damit sind die Änderungen auf dem z-meic wirksam.
Quelldatei:
Z80-Assembler_Logdatei.txt |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
c:\z-meic\RONPAS\_z-meic\10_BIOS>KEM80 M80 MEIC.ERL,MEIC.PRN=MEICBAT/M/Z
KEM80 1.1 - CP/M Konsolen-EMulator fuer Z80
(c) by Ronald Daleske
CP/M 2.2 Copyright 1979 (c) by Digital Research
BIOS-Monitor 2014 written by Ronald Daleske
A>M80 MEIC.ERL,MEIC.PRN=MEICBAT/M/Z
*MEICDEF.INC*
*MEICULDR.INC*
*MEICBIOS.INC*
*MEICIORQ.INC*
*MEICDATA.INC*
*MEICDEF.INC*
*MEICULDR.INC*
*MEICBIOS.INC*
*MEICIORQ.INC*
*MEICDATA.INC*
No Fatal error(s)
c:\z-meic\RONPAS\_z-meic\10_BIOS>KEM80 LINKMT MEIC=MEIC/M/P:0000
KEM80 1.1 - CP/M Konsolen-EMulator fuer Z80
(c) by Ronald Daleske
CP/M 2.2 Copyright 1979 (c) by Digital Research
BIOS-Monitor 2014 written by Ronald Daleske
A>LINKMT MEIC=MEIC/M/P:0000
Link/MT+ Release 5.5
Processing file- MEIC .ERL
Undefined Symbols:
No Undefined Symbols
External Symbol Map:
0018 (decimal) records written to .COM file
Total Data: 0000H bytes
Total Code: 08D2H bytes
Remaining : AB2EH bytes
Link/MT+ Release 5.5 processing completed
c:\z-meic\RONPAS\_z-meic\10_BIOS>copy CPM_LW_A\MEIC.COM MEIC.COM
1 Datei(en) kopiert.
c:\z-meic\RONPAS\_z-meic\10_BIOS>COM2INC.exe MEIC.COM MEIC_TXT.INC Laenge_MEIC_Array MEIC_ARR CLEAR
COM2INC (c) by Ronald Daleske
COM_File: MEIC.COM
CLEAR aktiv
INC_File: MEIC_TXT.INC
c:\z-meic\RONPAS\_z-meic\10_BIOS>copy MEIC_TXT.INC ..\MEIC_TXT.INC
1 Datei(en) kopiert.
c:\z-meic\RONPAS\_z-meic\10_BIOS>pause
Drücken Sie eine beliebige Taste . . .
|
|
Wichtiger Hinweis:
Wird das Programm ASMEDIT.exe genutzt darf der PASCAL-Compiler RONPAS.exe nicht geöffnet sein, da dann die Ändeungen in der INCLUDE-Datei MEIC_TXT.INC nicht aktualisiert werden.
Der Ablauf sollte sein:
- Ändern des CP/M-BIOS mit ASMEDIT.exe, Starten der Assemblierung und Beenden von ASMEDIT.exe.
- Übersetzen der geänderten Quelltexte mit dem PASCAL-Compiler RONPAS64.exe.
- Brennen der HEX-Datei z-meic.hex mit RONPAS64.exe oder einem anderen Brennprogramm in den ATMEGA32A auf dem z-meic.
1.4. Quelltexte für BDOS 2.2 und CCP 2.2
Das Betriebssystem CP/M 2.2 ist so strukturiert, dass bei der Implementierung auf einem neuen Computer nur das BIOS an die jeweilige Hardware angepasst werden muss.
BDOS und CCP werden mit dem Linker (meist aus einer "*.REL" oder "*.ERL" Datei) auf die jeweiligen Startadressen gelinkt.
Das Konzept des z-meic ist es, die genutzte Hard- und Software offen zu legen und (so gut wie möglich) zu beschreiben. Daher werden hier die Quelltexte und der Prozess der Übersetzung mit angegeben.
Die Quelltexte für das CP/M BDOS 2.2 und das CCP 2.2 wurden übernommen aus:
Quelltext: Z80-Assembler, Quelldatei:
BDOS.INC |
|
;
; Montezuma Micro CP/M v 2.32
; BDOS - Basic Disk Operating System
; for Radio Shack Model 4 computer.
;
; This source code is for the Z80ASM assembler
; from SLR systems.
;
;
|
|
Quelltext: Z80-Assembler, Quelldatei:
CCP.INC |
|
;
; Model 4 Montezuma Micro CP/M v 2.32
; CCP - Console Command Processor
; for Radio Shack Model 4 computer.
;
; This source code is for the Z80ASM assembler
; from SLR systems.
;
;
|
|
Sie können im Internet in unterschiedlichen Archiven gefunden werden.
Zum Beispiel auf der Seite "cpmarchives.classiccmp.org": http://cpmarchives.classiccmp.org/trs80/Software/cpm/2006/trs80-cp.htm
unter dem Link: cpmarchives.classiccmp.org/trs80/Software/cpm/2006/Disassembly/mmcpm232.zip
Assemblieren, Linken des BDOS und des CCP und Umwandeln in ein Pascal-Array
Quelltext: Z80-Assembler, Quelldatei:
CPD5DEF.INC |
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
; **********************************************************
; Vereinbarungsteil fuer CP/M 2.2
; **********************************************************
STACK EQU 0FE80H
RAMSTART EQU 0F000H
TPA EQU 0100H
;CBIOS fuer CP/M 2.2
;
BIOSBASE EQU 0F000H
BIOSLEN EQU 1000H ; 4096 Byte
;
BDOSBASE EQU 0E200H
BDOSLEN EQU 0E00H ; 3584 Byte = 28 * 128
;
CCPBASE EQU 0DA00H
CCPLEN EQU 0800H ; 2048 Byte
;
EEROMCCP EQU 0100H
EEPROMBDOS EQU EEROMCCP+CCPLEN ; 0900H
;
USERLW EQU 4 ;Laufwerksregister
IOBYTE EQU 3 ;Intel I/O-Byte
;
SBDOS EQU BDOSBASE+6
SCCP EQU CCPBASE+03H
|
|
Hier eine Übersicht der Linkadressen für BIOS, BDOS und CCP.
Das BDOS wird auf die Adresse 0E200H (BDOSBASE) gelinkt.
Das CCP wird auf die Adresse 0DA00H (CCPBASE) gelinkt.
Die Quelltexte, Definitionsdateien und Hilfsprogramme für das CP/M-BDOS befinden sich unter:
"RONPAS_z-meic\20_BDOS"
Die Quelltexte, Definitionsdateien und Hilfsprogramme für das CP/M-CCP befinden sich unter:
"RONPAS_z-meic\30_CCP"
In beiden Verzeichnissen befindet sich der Editor:
"ASMEDIT.exe"
mit dessen Hilfe die Quelldateien durch Drücken auf den Start-Button:
assemblert, gelinkt und das PASCAL-Array erzeugt werden kann.
Der Ablauf ist der gleiche wie oben beim Übersetzen des CP/M-BIOS bereits ausführlich beschrieben wurde.