Z80 si CP/M

Categorii: Stiinta si Tehnologie, Programare

06-Dec-2018 23:37 - 31 vizionari

Nostalgic dupa ZX Spectrum, am cautat un emulator de CP/M si am gasit RunCPM.

Dupa ce l-am pornit si am apelat cateva comenzi CP/M si dupa ce am gasit un exemplu de program in asm, am reusit sa afisez un mesaj text dintr-o aplicatie construita din surse:

CP/M este primul sistem de operare pentru calculatoare personale,

In imagini am sistemul CP/M cu utilitarele pe discul A si doua programe sursa asm pe discul B. Dupa asamblare cu z80asm (facut prin anii 1983-1986) rezulta direct fisierul executabil. DIn test1.z80 rezulta test1.com si din test2.z80 rezulta test2.com.

Cele doua programe asm sunt foarte simple:

test1.z80


;
; My test program 1
;

BDOS	equ	0005h

	org	0100h
	ld	c,9
	ld	de,MSG1
	call	BDOS
	ld	c,9
	ld	de,MSG2
	call	BDOS
	;iese in sistem
	ret

MSG1	db	'Hello!',0Dh,0Ah,'$'
MSG2	db	'World!',0Dh,0Ah,'$'


test2.z80


;
; My test program 2
;

CPM_CONOUT equ 9

;;---------------------------------------------------------
;; display message and then return back to the command-line
	org	0100h

	ld hl,message
	call display_message
	ret

;;---------------------------------------------------------
;; HL = pointer to null terminated message
display_message
	ld a,(hl)				;; get ASCII character
	inc hl					;; increment pointer for next character
	or a					;; end of message marker (0)?
	ret z					;; quit if end of message marker found.
	call display_char		;; send character to console output
	jp display_message		;; loop for next char

;;---------------------------------------------------------
;; display char using BIOS function CONOUT
;;
;; A = ASCII character

display_char
	push hl
	push de
	push bc
	call do_conout
	pop bc
	pop de
	pop hl
	ret
do_conout
	ld de,CPM_CONOUT
	ld c,a
	ld hl,(1)				;; address of JP BOOT entry in table
	add hl,de				;; add on offset
	jp (hl)

;;---------------------------------------------------------
;; the message to display

message		db "Hello World!",0


In vremea lui CP/M memoria calculatoarelor era mica (maxim 64k) si organizata simplu (fara pagini, fara relocare), toate programele se incarcau in memorie la aceeasi adresa si incepeau de la aceeasi adresa (0100h) si se executa un singur program, adica nu era prevazuta executia paralela si nici cooperativa.

Acum se poate rula CP/M pe Arduino Due, sau pe alte microcontrolere care au suficient RAM sa simuleze memoria necesara CP/M plus ceva rezerva pentru sistemul de simulare.



Ultimele pagini: RSS

Alte adrese de Internet

Categorii

Istoric



Contorizari incepand cu 9 iunie 2014:
Flag Counter

Atentie: Continutul acestui server reprezinta ideile mele si acestea pot fi gresite.