entwickelt von Ronald Daleske

Startseite Impressum

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.

Bild 7.3. ASMEDIT MEICBIOS

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.

Start

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:

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

1
2
3
4
5
6
7
8
9
; 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

1
2
3
4
5
6
7
8
9
; 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:

Start

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.


Startseite Impressum