# Build ddt180.com from ddt180.z80
+CPM := 0
+
PROG := ddt180
+OBJ := $(PROG).rel
-SRC := $(PROG).z80
+ifneq ($(CPM),0)
+ SUFFIX := z80
+else
+ SUFFIX := 180
+endif
EXTRA_DIST := autorevision.cache version.inc
-OBJ := $(SRC:.z80=.rel)
DIST_NAME = $(PROG)_$(VERS).zip
PREFIX = $(PROG)_$(VERS)
-ASM := zxcc slrz80.com
+ASM := zxcc slr$(SUFFIX).com
LINK := zxcc link80.com
CP := cp
RM := rm -f
.phony: all
all: $(PROG).com
+.intermediate: $(PROG).180
+$(PROG).180: $(PROG).z80
+ cp $< $@
$(PROG).com: $(PROG).prl Makefile
@# Remove the PRL header record (256 bytes)
$(PROG).prl: $(OBJ)
$(LINK) -'$(PROG)[op]'
-$(PROG).rel: version.inc
+$(PROG).rel: config.inc version.inc
$(foreach X,$(subst =,:=,$(subst ",,$(filter VCS_%,\
$(shell autorevision -t sh -o $(CURDIR)/autorevision.cache)))),$(eval $X))
db '$(VERS)'\r\n\
endm\r\n\032" > $@
+config.inc: Makefile
+ @printf "\
+ CPM equ $(CPM)\r\n\
+ \032" > $@
+
.phony: dist
dist: $(PROG).com version.inc
$(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
.phony: clean
clean:
- rm -f $(PROG).com *.rel *.lst *.prl
+ rm -f $(PROG).com $(PROG).180 *.rel *.lst *.prl
.SUFFIXES:
-.SUFFIXES: .z80 .rel .prl
+.SUFFIXES: .z80 .180 .rel .prl
define cpm-asm =
exit $${ERROR}
endef
-%.rel %lst: %.z80
+%.rel %lst: %.$(SUFFIX)
@$(cpm-asm)
; - Cut the .PRL header (first 256 byte) end rename the result to DDTZ.COM.\r
\r
\r
+ maclib config.inc\r
+\r
; Some greneral definitions\r
\r
BS equ 08h\r
nop\r
ret\r
\r
-convec:\r
-const: jp cist ; return console input status\r
-conin: jp ci ; return console input character\r
-conout: jp co ; send console output character\r
-\r
;-------------------------------------------------------------------------------\r
\r
signon:\r
init::\r
LD SP,stack\r
\r
+ if CPM\r
+\r
ld hl,(1) ;wboot addr\r
ld de,convec\r
ex de,hl\r
ld (hl),d\r
inc hl\r
djnz vini_l\r
+ else\r
+ xor a\r
+ dec a\r
+ daa ; Z80: 099H, x180+: 0F9H\r
+ cp 99h ; Result on 180 type cpus is F9 here. Thanks Hitachi\r
+ jr z,ini_z80\r
\r
+ xor a\r
+ call cinit\r
+ ld a,1\r
+ call cinit\r
+ jr ini_sign\r
+ini_z80:\r
+; if ...\r
+; .printx Error: Not yet implemented!\r
+; db "Stop\r
+; endif\r
+ endif ; CPM\r
+\r
+ini_sign:\r
ld hl,signon\r
call pstr\r
ld hl,ddtz_base\r
\r
;-------------------------------------------------------------------------------\r
\r
-cist:\r
-ci:\r
-co:\r
+ if CPM\r
+\r
+convec:\r
+const: jp 0 ; return console input status\r
+conin: jp 0 ; return console input character\r
+conout: jp 0 ; send console output character\r
+\r
+ else\r
+\r
+ include z180reg.inc\r
+\r
+iobyte equ 3\r
+\r
+max_device equ 3\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+; init device\r
+cinit: ; a = device\r
+ call vector_io_0\r
+ dw as0init\r
+ dw rret\r
+ dw rret\r
+ dw rret\r
+\r
+; character input status\r
+const: ; return a != 0 if character waiting\r
+ call vector_io\r
+ dw as0ista\r
+ dw null$status\r
+ dw csio_ista\r
+ dw null$status\r
+\r
+; character input\r
+conin: ; return a = input char\r
+ call vector_io\r
+ dw as0inp\r
+ dw null$input\r
+ dw csio_inp\r
+ dw null$input\r
+\r
+; character output\r
+conout: ; c = output char\r
+ call vector_io\r
+ dw as0out\r
+ dw rret\r
+ dw csio_out\r
+ dw rret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+vector_io:\r
+ ld a,(iobyte)\r
+vector_io_0:\r
+ pop hl\r
+ cp max_device\r
+ jr c,exist\r
+ ld a,max_device ; use null device if a >= max$device\r
+exist:\r
+ call add_hl_a2\r
+ ld a,(hl)\r
+ inc hl\r
+ ld h,(hl)\r
+ ld l,a\r
+ jp (hl)\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+null$input:\r
+ ld a,1Ah\r
+rret:\r
+ ret\r
+ret$true:\r
+ or 0FFh\r
+ ret\r
+\r
+null$status:\r
+ xor a\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+;\r
+; TC = (f PHI /(2*baudrate*Clock_mode)) - 2\r
+;\r
+; TC = (f PHI / (32 * baudrate)) - 2\r
+;\r
+; Init Serial I/O for console input and output (ASCI1)\r
+;\r
+\r
+\r
+\r
+as0init:\r
+ ld hl,initab0\r
+ jp ioiniml\r
+\r
+as1init:\r
+ ld hl,initab1\r
+ jp ioiniml\r
+\r
+\r
+ ld a,M_MPBT\r
+ out0 (cntlb1),a\r
+ ld a,M_RE + M_TE + M_MOD2 ;Rx/Tx enable\r
+ out0 (cntla1),a\r
+ ld a,M_RIE\r
+ out0 (stat1),a ;Enable rx interrupts\r
+\r
+ ret ;\r
+\r
+\r
+initab0:\r
+ db 1,stat0,0 ;Disable rx/tx interrupts\r
+ ;Enable baud rate generator\r
+ db 1,asext0,M_BRGMOD+M_DCD0DIS+M_CTS0DIS\r
+ db 2,astc0l,low 28, high 28\r
+ db 1,cntlb0,M_MPBT ;No MP Mode, X16\r
+ db 1,cntla0,M_RE+M_TE+M_MOD2 ;Rx/Tx enable, 8N1\r
+ db 0\r
+\r
+initab1:\r
+ db 1,stat1,0 ;Disable rx/tx ints, disable CTS1\r
+ db 1,asext1,M_BRGMOD ;Enable baud rate generator\r
+ db 2,astc1l,low 3, high 3\r
+ db 1,cntlb1,M_MPBT ;No MP Mode, X16\r
+ db 1,cntla1,M_RE+M_TE+M_MOD2 ;Rx/Tx enable, 8N1\r
+ db 0\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+ioiniml:\r
+ push bc\r
+ xor a\r
+ioml_lp:\r
+ ld b,(hl)\r
+ inc hl\r
+ cp b\r
+ jr z,ioml_e\r
+\r
+ ld c,(hl)\r
+ inc hl\r
+ otimr\r
+ jr ioml_lp\r
+ioml_e:\r
+ pop bc\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+as0ista:\r
+ in0 a,(stat0)\r
+ rlca\r
+ sbc a,a\r
+ ret\r
+\r
+as1ista:\r
+ in0 a,(stat1)\r
+ rlca\r
+ sbc a,a\r
+ ret\r
+\r
+as0inp:\r
+ in0 a,(stat0)\r
+ rlca\r
+ jr nc,as0inp\r
+ in0 a,rdr0\r
+ ret\r
+\r
+as1inp:\r
+ in0 a,(stat1)\r
+ rlca\r
+ jr nc,as1inp\r
+ in0 a,rdr1\r
+ ret\r
+\r
+as0out:\r
+ in0 a,(stat0)\r
+ and M_TDRE\r
+ jr z,as0out\r
+ out0 (tdr0),c\r
+ ld a,c\r
+ ret\r
+\r
+as1out:\r
+ in0 a,(stat1)\r
+ and M_TDRE\r
+ jr z,as1out\r
+ out0 (tdr1),c\r
+ ld a,c\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+csio_ista:\r
+csio_inp:\r
+csio_out:\r
+ xor a\r
+ ret\r
+\r
+\r
+ ld a,0ffh\r
+do_csio:\r
+ push af\r
+ call csio_wait_te\r
+ pop af\r
+ out0 (trdr),a\r
+ ld a,M_CSIO_TE\r
+ out0 (cntr),a\r
+ call csio_wait_te\r
+ in0 a,(trdr)\r
+ ret\r
+\r
+csio_wait_te:\r
+ in0 a,(cntr)\r
+ and M_CSIO_TE\r
+ jr nz,csio_wait_te\r
ret\r
\r
+ endif ; CPM\r
\r
;-------------------------------------------------------------------------------\r
\r