version for new assembler
This commit is contained in:
parent
d8e018a044
commit
345609b5ac
|
@ -1,25 +1,44 @@
|
||||||
TAIL=tail.hermac
|
TAIL=libhermac_o.a
|
||||||
# Other possibilities are: tail.nascom and tail.cpm
|
# Other possibilities are: tail.nascom and tail.cpm
|
||||||
|
MACH=z80
|
||||||
|
|
||||||
all: tail.cpm tail.nascom tail.hermac
|
all: head_em.o libhermac_o.a libnascom_o.a libcpm_o.a
|
||||||
|
|
||||||
install: $(TAIL)
|
install: head_em.o $(TAIL)
|
||||||
../../install head_em.s head_em
|
../../install head_em.o head_em
|
||||||
../../install $(TAIL) tail_sys
|
../../install $(TAIL) tail_mon
|
||||||
|
|
||||||
cmp: $(TAIL)
|
cmp: head_em.o $(TAIL)
|
||||||
-../../compare head_em.s head_em
|
-../../compare head_em.o head_em
|
||||||
-../../compare $(TAIL) tail_sys
|
-../../compare $(TAIL) tail_mon
|
||||||
|
|
||||||
tail.cpm: mon.cpm.s
|
head_em.o: head_em.s
|
||||||
|
$(MACH) -I../../../h -c head_em.s
|
||||||
|
|
||||||
|
libcpm_o.a: libcpm_s.a
|
||||||
|
ASAR=aal ; export ASAR; march . libcpm_o.a
|
||||||
|
|
||||||
|
libnascom_o.a: libnascom_s.a
|
||||||
|
ASAR=aal ; export ASAR; march . libnascom_o.a
|
||||||
|
|
||||||
|
libhermac_o.a: libhermac_s.a
|
||||||
|
ASAR=aal ; export ASAR; march . libhermac_o.a
|
||||||
|
|
||||||
|
libcpm_s.a:
|
||||||
@echo Warning: untested, this is an example
|
@echo Warning: untested, this is an example
|
||||||
arch cr tail.cpm mon.cpm.s
|
arch cr libcpm_s.a mon.cpm.s
|
||||||
|
echo libcpm_s.a > LIST
|
||||||
|
arch t libcpm_s.a >> LIST
|
||||||
|
|
||||||
tail.nascom: mon.s char.nas.s
|
libnascom_s.a:
|
||||||
arch cr tail.nascom mon.s char.nas.s
|
arch cr libnascom_s.a mon.s char.nas.s
|
||||||
|
echo libnascom_s.a > LIST
|
||||||
|
arch t libnascom_s.a >> LIST
|
||||||
|
|
||||||
tail.hermac: mon.s char.her.s
|
libhermac_s.a:
|
||||||
arch cr tail.hermac mon.s char.her.s
|
arch cr libhermac_s.a mon.s char.her.s
|
||||||
|
echo libhermac_s.a > LIST
|
||||||
|
arch t libhermac_s.a >> LIST
|
||||||
|
|
||||||
opr:
|
opr:
|
||||||
make pr | opr
|
make pr | opr
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define getchar, putchar
|
.define getchar, putchar
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
! These getchar and putchar routines can be used for HERMAC computer
|
! These getchar and putchar routines can be used for HERMAC computer
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
.define putchar,getchar
|
.define putchar,getchar
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
! output routine in monitor for the nascom
|
! output routine in monitor for the nascom
|
||||||
CRT = 0x013B
|
CRT = 0x013B
|
||||||
! output a charcter
|
! output a charcter
|
||||||
! entry: ascii character in a
|
! entry: ascii character in a
|
||||||
.text
|
.sect .text
|
||||||
putchar:
|
putchar:
|
||||||
push hl
|
push hl
|
||||||
push bc
|
push bc
|
||||||
|
@ -22,11 +27,11 @@ fetch: inc hl
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
jr 2b
|
jr 2b
|
||||||
! conversion table for nascom characters
|
! conversion table for nascom characters
|
||||||
tab: .byte 0x0D,0x00
|
tab: .data1 0x0D,0x00
|
||||||
.byte 0x1B,0x1E
|
.data1 0x1B,0x1E
|
||||||
.byte 0x08,0x1D
|
.data1 0x08,0x1D
|
||||||
.byte 0x0A,0x1F
|
.data1 0x0A,0x1F
|
||||||
.byte 0x7F,0x00
|
.data1 0x7F,0x00
|
||||||
|
|
||||||
KBD = 0x69
|
KBD = 0x69
|
||||||
get character from keyboard
|
get character from keyboard
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
.define EARRAY,ERANGE,EILLINS,EILLSIZE,ECASE,EMON,EHEAP
|
.define EARRAY,ERANGE,EILLINS,EILLSIZE,ECASE,EMON,EHEAP
|
||||||
.define hol0,trapproc,trpim,argv,hp,.reghp,envp,begbss,ignmask
|
.define hol0,trapproc,trpim,argv,hp,.reghp,envp,begbss,ignmask
|
||||||
.define savebc,savede,savehl,saveix,saveaf,saveiy,ebadmon
|
.define savebc,savede,savehl,saveix,saveaf,saveiy,ebadmon
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
EARRAY = 0
|
EARRAY = 0
|
||||||
ERANGE = 1
|
ERANGE = 1
|
||||||
EHEAP = 17
|
EHEAP = 17
|
||||||
|
@ -11,10 +16,9 @@
|
||||||
ebadmon=25
|
ebadmon=25
|
||||||
|
|
||||||
|
|
||||||
.base 0x1000
|
.sect .text
|
||||||
.text
|
|
||||||
|
|
||||||
! clear .bss
|
! clear .sect .bss
|
||||||
ld sp,0x7ffe !address of fbase
|
ld sp,0x7ffe !address of fbase
|
||||||
ld de,endbss
|
ld de,endbss
|
||||||
ld h,d
|
ld h,d
|
||||||
|
@ -44,37 +48,37 @@
|
||||||
|
|
||||||
jp 0x20
|
jp 0x20
|
||||||
|
|
||||||
.bss
|
.sect .bss
|
||||||
begbss:
|
begbss:
|
||||||
.data
|
.sect .data
|
||||||
hol0:
|
hol0:
|
||||||
.word 0,0
|
.data2 0,0
|
||||||
.word 0,0
|
.data2 0,0
|
||||||
saveaf:
|
saveaf:
|
||||||
.word 0
|
.data2 0
|
||||||
savebc:
|
savebc:
|
||||||
.word 0
|
.data2 0
|
||||||
savede:
|
savede:
|
||||||
.word 0
|
.data2 0
|
||||||
savehl:
|
savehl:
|
||||||
.word 0
|
.data2 0
|
||||||
saveix:
|
saveix:
|
||||||
.word 0
|
.data2 0
|
||||||
saveiy:
|
saveiy:
|
||||||
.word 0
|
.data2 0
|
||||||
ignmask:
|
ignmask:
|
||||||
.word 0
|
.data2 0
|
||||||
hp:
|
hp:
|
||||||
.word 0
|
.data2 0
|
||||||
trapproc:
|
trapproc:
|
||||||
.word 0
|
.data2 0
|
||||||
trpim:
|
trpim:
|
||||||
.word 0
|
.data2 0
|
||||||
argv:
|
argv:
|
||||||
.word 3f
|
.data2 3f
|
||||||
envp:
|
envp:
|
||||||
.word 0
|
.data2 0
|
||||||
3:
|
3:
|
||||||
.asciz 'PROGRAM'
|
.asciz 'PROGRAM'
|
||||||
.reghp:
|
.reghp:
|
||||||
.word endbss
|
.data2 endbss
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
.define .mon
|
.define .mon
|
||||||
.define uxfinish
|
.define uxfinish
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
! monitor instruction
|
! monitor instruction
|
||||||
! a small collection of UNIX system calls implemented under CP/M
|
! a small collection of UNIX system calls implemented under CP/M
|
||||||
|
@ -98,21 +103,21 @@
|
||||||
zcount=41
|
zcount=41
|
||||||
zsave=42
|
zsave=42
|
||||||
|
|
||||||
.errnz filefcb
|
.assert [ filefcb] <> 0
|
||||||
|
|
||||||
0: .space maxfiles*filesize
|
0: .space maxfiles*filesize
|
||||||
filearea = 0b+128
|
filearea = 0b+128
|
||||||
sibuf:
|
sibuf:
|
||||||
.word 0
|
.data2 0
|
||||||
.space 82
|
.space 82
|
||||||
siptr: .space 2
|
siptr: .space 2
|
||||||
saveargs:
|
saveargs:
|
||||||
.space 128
|
.space 128
|
||||||
argc: .space 2
|
argc: .space 2
|
||||||
ttymode:.byte 9,9,8,21;.short 06310+RAW*040 ! raw = 040
|
ttymode:.data1 9,9,8,21;.data2 06310+RAW*040 ! raw = 040
|
||||||
|
|
||||||
return:
|
return:
|
||||||
.word 0,0
|
.data2 0,0
|
||||||
uxinit:
|
uxinit:
|
||||||
xor a
|
xor a
|
||||||
ld c,maxfiles
|
ld c,maxfiles
|
||||||
|
@ -155,70 +160,70 @@ uxfinish:
|
||||||
jp (hl)
|
jp (hl)
|
||||||
|
|
||||||
systab:
|
systab:
|
||||||
.word e.mon ! ux_indir
|
.data2 e.mon ! ux_indir
|
||||||
.word ux_exit
|
.data2 ux_exit
|
||||||
.word e.mon ! ux_fork
|
.data2 e.mon ! ux_fork
|
||||||
.word ux_read
|
.data2 ux_read
|
||||||
.word ux_write
|
.data2 ux_write
|
||||||
.word ux_open
|
.data2 ux_open
|
||||||
.word ux_close
|
.data2 ux_close
|
||||||
.word e.mon ! ux_wait
|
.data2 e.mon ! ux_wait
|
||||||
.word ux_creat
|
.data2 ux_creat
|
||||||
.word e.mon ! ux_link
|
.data2 e.mon ! ux_link
|
||||||
.word ux_unlink
|
.data2 ux_unlink
|
||||||
.word e.mon ! ux_exec
|
.data2 e.mon ! ux_exec
|
||||||
.word e.mon ! ux_chdir
|
.data2 e.mon ! ux_chdir
|
||||||
.word ux_time
|
.data2 ux_time
|
||||||
.word e.mon ! ux_mknod
|
.data2 e.mon ! ux_mknod
|
||||||
.word e.mon ! ux_chmod
|
.data2 e.mon ! ux_chmod
|
||||||
.word e.mon ! ux_chown
|
.data2 e.mon ! ux_chown
|
||||||
.word e.mon ! ux_break
|
.data2 e.mon ! ux_break
|
||||||
.word e.mon ! ux_stat
|
.data2 e.mon ! ux_stat
|
||||||
.word e.mon ! ux_seek
|
.data2 e.mon ! ux_seek
|
||||||
.word ux_getpid
|
.data2 ux_getpid
|
||||||
.word e.mon ! ux_mount
|
.data2 e.mon ! ux_mount
|
||||||
.word e.mon ! ux_umount
|
.data2 e.mon ! ux_umount
|
||||||
.word e.mon ! ux_setuid
|
.data2 e.mon ! ux_setuid
|
||||||
.word e.mon ! ux_getuid
|
.data2 e.mon ! ux_getuid
|
||||||
.word e.mon ! ux_stime
|
.data2 e.mon ! ux_stime
|
||||||
.word e.mon ! ux_ptrace
|
.data2 e.mon ! ux_ptrace
|
||||||
.word e.mon ! ux_alarm
|
.data2 e.mon ! ux_alarm
|
||||||
.word e.mon ! ux_fstat
|
.data2 e.mon ! ux_fstat
|
||||||
.word e.mon ! ux_pause
|
.data2 e.mon ! ux_pause
|
||||||
.word e.mon ! ux_utime
|
.data2 e.mon ! ux_utime
|
||||||
.word e.mon ! ux_stty
|
.data2 e.mon ! ux_stty
|
||||||
.word e.mon ! ux_gtty
|
.data2 e.mon ! ux_gtty
|
||||||
.word e.mon ! ux_access
|
.data2 e.mon ! ux_access
|
||||||
.word e.mon ! ux_nice
|
.data2 e.mon ! ux_nice
|
||||||
.word ux_ftime
|
.data2 ux_ftime
|
||||||
.word e.mon ! ux_sync
|
.data2 e.mon ! ux_sync
|
||||||
.word e.mon ! ux_kill
|
.data2 e.mon ! ux_kill
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word e.mon ! ux_dup
|
.data2 e.mon ! ux_dup
|
||||||
.word e.mon ! ux_pipe
|
.data2 e.mon ! ux_pipe
|
||||||
.word e.mon ! ux_times
|
.data2 e.mon ! ux_times
|
||||||
.word e.mon ! ux_prof
|
.data2 e.mon ! ux_prof
|
||||||
.word e.mon ! ux_unused
|
.data2 e.mon ! ux_unused
|
||||||
.word e.mon ! ux_setgid
|
.data2 e.mon ! ux_setgid
|
||||||
.word e.mon ! ux_getgid
|
.data2 e.mon ! ux_getgid
|
||||||
.word e.mon ! ux_sig
|
.data2 e.mon ! ux_sig
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word ux_ioctl
|
.data2 ux_ioctl
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld ! ux_exece
|
.data2 unimpld ! ux_exece
|
||||||
.word e.mon ! ux_umask
|
.data2 e.mon ! ux_umask
|
||||||
.word e.mon ! ux_chroot
|
.data2 e.mon ! ux_chroot
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
|
|
||||||
emptyfile:
|
emptyfile:
|
||||||
! searches for a free filestructure
|
! searches for a free filestructure
|
||||||
|
@ -902,23 +907,23 @@ ux_getpid:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
retarea: .word 0 ! base of buffer for result values (max 8 bytes)
|
retarea: .data2 0 ! base of buffer for result values (max 8 bytes)
|
||||||
.word 0
|
.data2 0
|
||||||
.word 0
|
.data2 0
|
||||||
.word 0
|
.data2 0
|
||||||
|
|
||||||
trapproc:
|
trapproc:
|
||||||
.word 0
|
.data2 0
|
||||||
|
|
||||||
nextp: .byte 0
|
nextp: .data1 0
|
||||||
|
|
||||||
header:
|
header:
|
||||||
ntext: .word 0
|
ntext: .data2 0
|
||||||
ndata: .word 0
|
ndata: .data2 0
|
||||||
nproc: .word 0
|
nproc: .data2 0
|
||||||
entry: .word 0
|
entry: .data2 0
|
||||||
nline: .word 0
|
nline: .data2 0
|
||||||
|
|
||||||
hp: .word 0
|
hp: .data2 0
|
||||||
pb: .word 0
|
pb: .data2 0
|
||||||
pd: .word 0
|
pd: .data2 0
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define .mon
|
.define .mon
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
! Monitor call
|
! Monitor call
|
||||||
! Expects on stack: monitor call number
|
! Expects on stack: monitor call number
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define putchr
|
.define putchr
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
! output routine in monitor
|
! output routine in monitor
|
||||||
CRT = 0x013B
|
CRT = 0x013B
|
||||||
! output a charcter
|
! output a charcter
|
||||||
|
@ -21,8 +26,8 @@ fetch: inc hl
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
jr 2b
|
jr 2b
|
||||||
! conversion table for nascom characters
|
! conversion table for nascom characters
|
||||||
tab: .byte 0x0D,0x00
|
tab: .data1 0x0D,0x00
|
||||||
.byte 0x1B,0x1E
|
.data1 0x1B,0x1E
|
||||||
.byte 0x08,0x1D
|
.data1 0x08,0x1D
|
||||||
.byte 0x0A,0x1F
|
.data1 0x0A,0x1F
|
||||||
.byte 0x7F,0x00
|
.data1 0x7F,0x00
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define putchr
|
.define putchr
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
putchr:
|
putchr:
|
||||||
push hl
|
push hl
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define _read,_write,_ioctl,_getpid,_open,_close,_exit,_errno
|
.define _read,_write,_ioctl,_getpid,_open,_close,_exit,_errno
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
_read:
|
_read:
|
||||||
ld (savebc),bc
|
ld (savebc),bc
|
||||||
push af
|
push af
|
||||||
|
@ -149,14 +154,14 @@ _close:
|
||||||
ret
|
ret
|
||||||
_exit:
|
_exit:
|
||||||
jp 0x38
|
jp 0x38
|
||||||
.data
|
.sect .data
|
||||||
_errno:
|
_errno:
|
||||||
.word 0
|
.data2 0
|
||||||
! output routine in monitor
|
! output routine in monitor
|
||||||
CRT = 0x013B
|
CRT = 0x013B
|
||||||
! output a charcter
|
! output a charcter
|
||||||
! entry: ascii character in a
|
! entry: ascii character in a
|
||||||
.text
|
.sect .text
|
||||||
!putchr:
|
!putchr:
|
||||||
! push hl
|
! push hl
|
||||||
! push bc
|
! push bc
|
||||||
|
@ -175,11 +180,11 @@ CRT = 0x013B
|
||||||
! ld a,(hl)
|
! ld a,(hl)
|
||||||
! jr 2b
|
! jr 2b
|
||||||
!! conversion table for nascom characters
|
!! conversion table for nascom characters
|
||||||
!tab: .byte 0x0D,0x00
|
!tab: .data1 0x0D,0x00
|
||||||
! .byte 0x1B,0x1E
|
! .data1 0x1B,0x1E
|
||||||
! .byte 0x08,0x1D
|
! .data1 0x08,0x1D
|
||||||
! .byte 0x0A,0x1F
|
! .data1 0x0A,0x1F
|
||||||
! .byte 0x7F,0x00
|
! .data1 0x7F,0x00
|
||||||
|
|
||||||
KBD = 0x69
|
KBD = 0x69
|
||||||
! get character from keyboard
|
! get character from keyboard
|
||||||
|
|
|
@ -1,25 +1,44 @@
|
||||||
TAIL=tail.hermac
|
TAIL=libhermac_o.a
|
||||||
# Other possibilities are: tail.nascom and tail.cpm
|
# Other possibilities are: tail.nascom and tail.cpm
|
||||||
|
MACH=z80
|
||||||
|
|
||||||
all: tail.cpm tail.nascom tail.hermac
|
all: head_em.o libhermac_o.a libnascom_o.a libcpm_o.a
|
||||||
|
|
||||||
install: $(TAIL)
|
install: head_em.o $(TAIL)
|
||||||
../../install head_em.s head_em
|
../../install head_em.o head_em
|
||||||
../../install $(TAIL) tail_sys
|
../../install $(TAIL) tail_mon
|
||||||
|
|
||||||
cmp: $(TAIL)
|
cmp: head_em.o $(TAIL)
|
||||||
-../../compare head_em.s head_em
|
-../../compare head_em.o head_em
|
||||||
-../../compare $(TAIL) tail_sys
|
-../../compare $(TAIL) tail_mon
|
||||||
|
|
||||||
tail.cpm: mon.cpm.s
|
head_em.o: head_em.s
|
||||||
|
$(MACH) -I../../../h -c head_em.s
|
||||||
|
|
||||||
|
libcpm_o.a: libcpm_s.a
|
||||||
|
ASAR=aal ; export ASAR; march . libcpm_o.a
|
||||||
|
|
||||||
|
libnascom_o.a: libnascom_s.a
|
||||||
|
ASAR=aal ; export ASAR; march . libnascom_o.a
|
||||||
|
|
||||||
|
libhermac_o.a: libhermac_s.a
|
||||||
|
ASAR=aal ; export ASAR; march . libhermac_o.a
|
||||||
|
|
||||||
|
libcpm_s.a:
|
||||||
@echo Warning: untested, this is an example
|
@echo Warning: untested, this is an example
|
||||||
arch cr tail.cpm mon.cpm.s
|
arch cr libcpm_s.a mon.cpm.s
|
||||||
|
echo libcpm_s.a > LIST
|
||||||
|
arch t libcpm_s.a >> LIST
|
||||||
|
|
||||||
tail.nascom: mon.s char.nas.s
|
libnascom_s.a:
|
||||||
arch cr tail.nascom mon.s char.nas.s
|
arch cr libnascom_s.a mon.s char.nas.s
|
||||||
|
echo libnascom_s.a > LIST
|
||||||
|
arch t libnascom_s.a >> LIST
|
||||||
|
|
||||||
tail.hermac: mon.s char.her.s
|
libhermac_s.a:
|
||||||
arch cr tail.hermac mon.s char.her.s
|
arch cr libhermac_s.a mon.s char.her.s
|
||||||
|
echo libhermac_s.a > LIST
|
||||||
|
arch t libhermac_s.a >> LIST
|
||||||
|
|
||||||
opr:
|
opr:
|
||||||
make pr | opr
|
make pr | opr
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define getchar, putchar
|
.define getchar, putchar
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
! These getchar and putchar routines can be used for HERMAC computer
|
! These getchar and putchar routines can be used for HERMAC computer
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
.define putchar,getchar
|
.define putchar,getchar
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
! output routine in monitor for the nascom
|
! output routine in monitor for the nascom
|
||||||
CRT = 0x013B
|
CRT = 0x013B
|
||||||
! output a charcter
|
! output a charcter
|
||||||
! entry: ascii character in a
|
! entry: ascii character in a
|
||||||
.text
|
.sect .text
|
||||||
putchar:
|
putchar:
|
||||||
push hl
|
push hl
|
||||||
push bc
|
push bc
|
||||||
|
@ -22,11 +27,11 @@ fetch: inc hl
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
jr 2b
|
jr 2b
|
||||||
! conversion table for nascom characters
|
! conversion table for nascom characters
|
||||||
tab: .byte 0x0D,0x00
|
tab: .data1 0x0D,0x00
|
||||||
.byte 0x1B,0x1E
|
.data1 0x1B,0x1E
|
||||||
.byte 0x08,0x1D
|
.data1 0x08,0x1D
|
||||||
.byte 0x0A,0x1F
|
.data1 0x0A,0x1F
|
||||||
.byte 0x7F,0x00
|
.data1 0x7F,0x00
|
||||||
|
|
||||||
KBD = 0x69
|
KBD = 0x69
|
||||||
get character from keyboard
|
get character from keyboard
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
.define EARRAY,ERANGE,EILLINS,EILLSIZE,ECASE,EMON,EHEAP
|
.define EARRAY,ERANGE,EILLINS,EILLSIZE,ECASE,EMON,EHEAP
|
||||||
.define hol0,trapproc,trpim,argv,hp,.reghp,envp,begbss,ignmask
|
.define hol0,trapproc,trpim,argv,hp,.reghp,envp,begbss,ignmask
|
||||||
.define savebc,savede,savehl,saveix,saveaf,saveiy,ebadmon
|
.define savebc,savede,savehl,saveix,saveaf,saveiy,ebadmon
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
EARRAY = 0
|
EARRAY = 0
|
||||||
ERANGE = 1
|
ERANGE = 1
|
||||||
EHEAP = 17
|
EHEAP = 17
|
||||||
|
@ -11,10 +16,9 @@
|
||||||
ebadmon=25
|
ebadmon=25
|
||||||
|
|
||||||
|
|
||||||
.base 0x1000
|
.sect .text
|
||||||
.text
|
|
||||||
|
|
||||||
! clear .bss
|
! clear .sect .bss
|
||||||
ld sp,0x7ffe !address of fbase
|
ld sp,0x7ffe !address of fbase
|
||||||
ld de,endbss
|
ld de,endbss
|
||||||
ld h,d
|
ld h,d
|
||||||
|
@ -44,37 +48,37 @@
|
||||||
|
|
||||||
jp 0x20
|
jp 0x20
|
||||||
|
|
||||||
.bss
|
.sect .bss
|
||||||
begbss:
|
begbss:
|
||||||
.data
|
.sect .data
|
||||||
hol0:
|
hol0:
|
||||||
.word 0,0
|
.data2 0,0
|
||||||
.word 0,0
|
.data2 0,0
|
||||||
saveaf:
|
saveaf:
|
||||||
.word 0
|
.data2 0
|
||||||
savebc:
|
savebc:
|
||||||
.word 0
|
.data2 0
|
||||||
savede:
|
savede:
|
||||||
.word 0
|
.data2 0
|
||||||
savehl:
|
savehl:
|
||||||
.word 0
|
.data2 0
|
||||||
saveix:
|
saveix:
|
||||||
.word 0
|
.data2 0
|
||||||
saveiy:
|
saveiy:
|
||||||
.word 0
|
.data2 0
|
||||||
ignmask:
|
ignmask:
|
||||||
.word 0
|
.data2 0
|
||||||
hp:
|
hp:
|
||||||
.word 0
|
.data2 0
|
||||||
trapproc:
|
trapproc:
|
||||||
.word 0
|
.data2 0
|
||||||
trpim:
|
trpim:
|
||||||
.word 0
|
.data2 0
|
||||||
argv:
|
argv:
|
||||||
.word 3f
|
.data2 3f
|
||||||
envp:
|
envp:
|
||||||
.word 0
|
.data2 0
|
||||||
3:
|
3:
|
||||||
.asciz 'PROGRAM'
|
.asciz 'PROGRAM'
|
||||||
.reghp:
|
.reghp:
|
||||||
.word endbss
|
.data2 endbss
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
.define .mon
|
.define .mon
|
||||||
.define uxfinish
|
.define uxfinish
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
! monitor instruction
|
! monitor instruction
|
||||||
! a small collection of UNIX system calls implemented under CP/M
|
! a small collection of UNIX system calls implemented under CP/M
|
||||||
|
@ -98,21 +103,21 @@
|
||||||
zcount=41
|
zcount=41
|
||||||
zsave=42
|
zsave=42
|
||||||
|
|
||||||
.errnz filefcb
|
.assert [ filefcb] <> 0
|
||||||
|
|
||||||
0: .space maxfiles*filesize
|
0: .space maxfiles*filesize
|
||||||
filearea = 0b+128
|
filearea = 0b+128
|
||||||
sibuf:
|
sibuf:
|
||||||
.word 0
|
.data2 0
|
||||||
.space 82
|
.space 82
|
||||||
siptr: .space 2
|
siptr: .space 2
|
||||||
saveargs:
|
saveargs:
|
||||||
.space 128
|
.space 128
|
||||||
argc: .space 2
|
argc: .space 2
|
||||||
ttymode:.byte 9,9,8,21;.short 06310+RAW*040 ! raw = 040
|
ttymode:.data1 9,9,8,21;.data2 06310+RAW*040 ! raw = 040
|
||||||
|
|
||||||
return:
|
return:
|
||||||
.word 0,0
|
.data2 0,0
|
||||||
uxinit:
|
uxinit:
|
||||||
xor a
|
xor a
|
||||||
ld c,maxfiles
|
ld c,maxfiles
|
||||||
|
@ -155,70 +160,70 @@ uxfinish:
|
||||||
jp (hl)
|
jp (hl)
|
||||||
|
|
||||||
systab:
|
systab:
|
||||||
.word e.mon ! ux_indir
|
.data2 e.mon ! ux_indir
|
||||||
.word ux_exit
|
.data2 ux_exit
|
||||||
.word e.mon ! ux_fork
|
.data2 e.mon ! ux_fork
|
||||||
.word ux_read
|
.data2 ux_read
|
||||||
.word ux_write
|
.data2 ux_write
|
||||||
.word ux_open
|
.data2 ux_open
|
||||||
.word ux_close
|
.data2 ux_close
|
||||||
.word e.mon ! ux_wait
|
.data2 e.mon ! ux_wait
|
||||||
.word ux_creat
|
.data2 ux_creat
|
||||||
.word e.mon ! ux_link
|
.data2 e.mon ! ux_link
|
||||||
.word ux_unlink
|
.data2 ux_unlink
|
||||||
.word e.mon ! ux_exec
|
.data2 e.mon ! ux_exec
|
||||||
.word e.mon ! ux_chdir
|
.data2 e.mon ! ux_chdir
|
||||||
.word ux_time
|
.data2 ux_time
|
||||||
.word e.mon ! ux_mknod
|
.data2 e.mon ! ux_mknod
|
||||||
.word e.mon ! ux_chmod
|
.data2 e.mon ! ux_chmod
|
||||||
.word e.mon ! ux_chown
|
.data2 e.mon ! ux_chown
|
||||||
.word e.mon ! ux_break
|
.data2 e.mon ! ux_break
|
||||||
.word e.mon ! ux_stat
|
.data2 e.mon ! ux_stat
|
||||||
.word e.mon ! ux_seek
|
.data2 e.mon ! ux_seek
|
||||||
.word ux_getpid
|
.data2 ux_getpid
|
||||||
.word e.mon ! ux_mount
|
.data2 e.mon ! ux_mount
|
||||||
.word e.mon ! ux_umount
|
.data2 e.mon ! ux_umount
|
||||||
.word e.mon ! ux_setuid
|
.data2 e.mon ! ux_setuid
|
||||||
.word e.mon ! ux_getuid
|
.data2 e.mon ! ux_getuid
|
||||||
.word e.mon ! ux_stime
|
.data2 e.mon ! ux_stime
|
||||||
.word e.mon ! ux_ptrace
|
.data2 e.mon ! ux_ptrace
|
||||||
.word e.mon ! ux_alarm
|
.data2 e.mon ! ux_alarm
|
||||||
.word e.mon ! ux_fstat
|
.data2 e.mon ! ux_fstat
|
||||||
.word e.mon ! ux_pause
|
.data2 e.mon ! ux_pause
|
||||||
.word e.mon ! ux_utime
|
.data2 e.mon ! ux_utime
|
||||||
.word e.mon ! ux_stty
|
.data2 e.mon ! ux_stty
|
||||||
.word e.mon ! ux_gtty
|
.data2 e.mon ! ux_gtty
|
||||||
.word e.mon ! ux_access
|
.data2 e.mon ! ux_access
|
||||||
.word e.mon ! ux_nice
|
.data2 e.mon ! ux_nice
|
||||||
.word ux_ftime
|
.data2 ux_ftime
|
||||||
.word e.mon ! ux_sync
|
.data2 e.mon ! ux_sync
|
||||||
.word e.mon ! ux_kill
|
.data2 e.mon ! ux_kill
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word e.mon ! ux_dup
|
.data2 e.mon ! ux_dup
|
||||||
.word e.mon ! ux_pipe
|
.data2 e.mon ! ux_pipe
|
||||||
.word e.mon ! ux_times
|
.data2 e.mon ! ux_times
|
||||||
.word e.mon ! ux_prof
|
.data2 e.mon ! ux_prof
|
||||||
.word e.mon ! ux_unused
|
.data2 e.mon ! ux_unused
|
||||||
.word e.mon ! ux_setgid
|
.data2 e.mon ! ux_setgid
|
||||||
.word e.mon ! ux_getgid
|
.data2 e.mon ! ux_getgid
|
||||||
.word e.mon ! ux_sig
|
.data2 e.mon ! ux_sig
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word ux_ioctl
|
.data2 ux_ioctl
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld ! ux_exece
|
.data2 unimpld ! ux_exece
|
||||||
.word e.mon ! ux_umask
|
.data2 e.mon ! ux_umask
|
||||||
.word e.mon ! ux_chroot
|
.data2 e.mon ! ux_chroot
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
.word unimpld
|
.data2 unimpld
|
||||||
|
|
||||||
emptyfile:
|
emptyfile:
|
||||||
! searches for a free filestructure
|
! searches for a free filestructure
|
||||||
|
@ -902,23 +907,23 @@ ux_getpid:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
retarea: .word 0 ! base of buffer for result values (max 8 bytes)
|
retarea: .data2 0 ! base of buffer for result values (max 8 bytes)
|
||||||
.word 0
|
.data2 0
|
||||||
.word 0
|
.data2 0
|
||||||
.word 0
|
.data2 0
|
||||||
|
|
||||||
trapproc:
|
trapproc:
|
||||||
.word 0
|
.data2 0
|
||||||
|
|
||||||
nextp: .byte 0
|
nextp: .data1 0
|
||||||
|
|
||||||
header:
|
header:
|
||||||
ntext: .word 0
|
ntext: .data2 0
|
||||||
ndata: .word 0
|
ndata: .data2 0
|
||||||
nproc: .word 0
|
nproc: .data2 0
|
||||||
entry: .word 0
|
entry: .data2 0
|
||||||
nline: .word 0
|
nline: .data2 0
|
||||||
|
|
||||||
hp: .word 0
|
hp: .data2 0
|
||||||
pb: .word 0
|
pb: .data2 0
|
||||||
pd: .word 0
|
pd: .data2 0
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define .mon
|
.define .mon
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
! Monitor call
|
! Monitor call
|
||||||
! Expects on stack: monitor call number
|
! Expects on stack: monitor call number
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define putchr
|
.define putchr
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
! output routine in monitor
|
! output routine in monitor
|
||||||
CRT = 0x013B
|
CRT = 0x013B
|
||||||
! output a charcter
|
! output a charcter
|
||||||
|
@ -21,8 +26,8 @@ fetch: inc hl
|
||||||
ld a,(hl)
|
ld a,(hl)
|
||||||
jr 2b
|
jr 2b
|
||||||
! conversion table for nascom characters
|
! conversion table for nascom characters
|
||||||
tab: .byte 0x0D,0x00
|
tab: .data1 0x0D,0x00
|
||||||
.byte 0x1B,0x1E
|
.data1 0x1B,0x1E
|
||||||
.byte 0x08,0x1D
|
.data1 0x08,0x1D
|
||||||
.byte 0x0A,0x1F
|
.data1 0x0A,0x1F
|
||||||
.byte 0x7F,0x00
|
.data1 0x7F,0x00
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define putchr
|
.define putchr
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
|
|
||||||
putchr:
|
putchr:
|
||||||
push hl
|
push hl
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
.define _read,_write,_ioctl,_getpid,_open,_close,_exit,_errno
|
.define _read,_write,_ioctl,_getpid,_open,_close,_exit,_errno
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
.sect .text
|
||||||
_read:
|
_read:
|
||||||
ld (savebc),bc
|
ld (savebc),bc
|
||||||
push af
|
push af
|
||||||
|
@ -149,14 +154,14 @@ _close:
|
||||||
ret
|
ret
|
||||||
_exit:
|
_exit:
|
||||||
jp 0x38
|
jp 0x38
|
||||||
.data
|
.sect .data
|
||||||
_errno:
|
_errno:
|
||||||
.word 0
|
.data2 0
|
||||||
! output routine in monitor
|
! output routine in monitor
|
||||||
CRT = 0x013B
|
CRT = 0x013B
|
||||||
! output a charcter
|
! output a charcter
|
||||||
! entry: ascii character in a
|
! entry: ascii character in a
|
||||||
.text
|
.sect .text
|
||||||
!putchr:
|
!putchr:
|
||||||
! push hl
|
! push hl
|
||||||
! push bc
|
! push bc
|
||||||
|
@ -175,11 +180,11 @@ CRT = 0x013B
|
||||||
! ld a,(hl)
|
! ld a,(hl)
|
||||||
! jr 2b
|
! jr 2b
|
||||||
!! conversion table for nascom characters
|
!! conversion table for nascom characters
|
||||||
!tab: .byte 0x0D,0x00
|
!tab: .data1 0x0D,0x00
|
||||||
! .byte 0x1B,0x1E
|
! .data1 0x1B,0x1E
|
||||||
! .byte 0x08,0x1D
|
! .data1 0x08,0x1D
|
||||||
! .byte 0x0A,0x1F
|
! .data1 0x0A,0x1F
|
||||||
! .byte 0x7F,0x00
|
! .data1 0x7F,0x00
|
||||||
|
|
||||||
KBD = 0x69
|
KBD = 0x69
|
||||||
! get character from keyboard
|
! get character from keyboard
|
||||||
|
|
Loading…
Reference in a new issue