diff --git a/mach/m68k4/libem/LIST b/mach/m68k4/libem/LIST index 1cbe1413e..66c59fe45 100644 --- a/mach/m68k4/libem/LIST +++ b/mach/m68k4/libem/LIST @@ -1,4 +1,4 @@ -tail_em.a +libem_s.a ari.s ara.s cvf.s @@ -30,4 +30,3 @@ trp.s dia.s printf.s dvu.s -sav.s diff --git a/mach/m68k4/libem/Makefile b/mach/m68k4/libem/Makefile index e740e504b..72404fbdb 100644 --- a/mach/m68k4/libem/Makefile +++ b/mach/m68k4/libem/Makefile @@ -1,17 +1,33 @@ # $Header$ -install: - ../../install tail_em.a tail_em - ../../install end.s end_em +MACH=m68k4 +install: all + ../../install head_em.o head_em + ../../install libem_o.a tail_em.rt + ../../install end.o end_em -cmp: - -../../compare tail_em.a tail_em - -../../compare end.s end_em +cmp: all + -../../compare head_em.o head_em + -../../compare libem_o.a tail_em.rt + -../../compare end.o end_em -clean : +all: head_em.o libem_o.a end.o +end.o: end.s + $(MACH) -I../../../h -c end.s + +head_em.o: head_em.s + $(MACH) -I../../../h -c head_em.s + +libem_o.a: libem_s.a + ASAR=aal ; export ASAR ;\ + march . libem_o.a + +clean: + rm -f *.o opr : - make pr | opr + make pr | opr pr: - @arch pv tail_em.a | pr -h `pwd`/tail_em.a - @pr `pwd`/end.s + @pr `pwd`/head_em.s + @arch pv libem_s.a | pr -h `pwd`/libem_s.a + @pr `pwd`/end.s diff --git a/mach/m68k4/libem/aciaio.s b/mach/m68k4/libem/aciaio.s index eabc9a63f..09577e1fd 100644 --- a/mach/m68k4/libem/aciaio.s +++ b/mach/m68k4/libem/aciaio.s @@ -1,9 +1,13 @@ .define .outch1,.outch2,.inch1,.inch2 +.sect .text +.sect .rom +.sect .data +.sect .bss - ! a0,d4 used + ! a0,d0 used ! character in d1 - .text + .sect .text .inch1: move.l #acia1,a0 bra .inch @@ -23,11 +27,10 @@ .outch2: move.l #acia2,a0 .outch: - move.b (a0),d4 - asr #2,d4 + move.b (a0),d0 + asr #2,d0 bcc .outch move.b d1,2(a0) rts - .align 2 diff --git a/mach/m68k4/libem/ara.s b/mach/m68k4/libem/ara.s index 24869056d..2f391a2a2 100644 --- a/mach/m68k4/libem/ara.s +++ b/mach/m68k4/libem/ara.s @@ -1,15 +1,18 @@ .define .sar .define .lar .define .aar +.sect .text +.sect .rom +.sect .data +.sect .bss !register usage: ! a0 : descriptor address ! d0 : index ! a1 : base address - .text + .sect .text .aar: - movem.l d0/d1/a0/a1,.savreg - move.l (sp)+,.retara ! return address + move.l (sp)+,d2 ! return address move.l (sp)+,a0 ! descriptor address move.l (sp)+,d0 ! index move.l (sp)+,a1 ! base address @@ -19,85 +22,77 @@ jsr .mlu add.l d1,a1 ! address of element move.l a1,-(sp) ! returned on stack - move.l .retara,-(sp) - movem.l d0/d1/a0/a1,.savreg + move.l d2,-(sp) rts - .lar: ! register usage: like .aar - ! d2 : # bytes / element - movem.l d0/d1/d2/a0/a1,.savreg - move.l (sp)+,.retara ! return address + move.l (sp)+,d2 ! return address move.l (sp)+,a0 move.l (sp)+,d0 move.l (sp)+,a1 sub.l (a0),d0 - move.l 8(a0),d2 ! # bytes / element move.l d0,-(sp) - move.l d2,-(sp) + move.l 8(a0),d0 + move.l d0,-(sp) jsr .mlu add.l d1,a1 ! address of element - add.l d2,a1 ! a1++ because of predecrement + add.l 8(a0),a1 ! a1++ because of predecrement clr.l d1 !?nodig? - asr #1,d2 + asr #1,d0 bne 3f move.b -(a1),d1 ! 1 byte element move.l d1,-(sp) bra 5f 3: - asr #1,d2 + asr #1,d0 bne 4f move.w -(a1),d1 ! 2 byte element move.l d1,-(sp) bra 5f 4: - sub.l #1,d2 + sub.l #1,d0 1: move.l -(a1),-(sp) ! 4n byte element (n = 1,2,...) - dbf d2,1b + dbf d0,1b 5: - move.l .retara,-(sp) - movem.l .savreg,d0/d1/d2/a0/a1 + move.l d2,-(sp) rts .sar: !register usage: same as lar - movem.l d0/d1/a0/a1,.savreg - move.l (sp)+,.retara + move.l (sp)+,d2 move.l (sp)+,a0 move.l (sp)+,d0 move.l (sp)+,a1 sub.l (a0),d0 - move.l 8(a0),d2 ! # bytes / element move.l d0,-(sp) - move.l d2,-(sp) + move.l 8(a0),d0 ! # bytes / element + move.l d0,-(sp) jsr .mlu add.l d1,a1 clr.l d1 !?nodig? - asr #1,d2 + asr #1,d0 bne 3f move.l (sp)+,d1 move.b d1,(a1) ! 1 byte element bra 4f 3: - asr #1,d2 + asr #1,d0 bne 5f move.l (sp)+,d1 move.w d1,(a1) ! 2 byte element bra 4f 5: - sub.l #1,d2 + sub.l #1,d0 1: move.l (sp)+,(a1)+ ! 4n byte element (n = 1,2,...) - dbf d2,1b + dbf d0,1b 4: - move.l .retara,-(sp) - movem.l .savreg,d0/d1/a0/a1 + move.l d2,-(sp) rts -.data -.retara: .long 0 + .align 2 diff --git a/mach/m68k4/libem/ari.s b/mach/m68k4/libem/ari.s index 19d642608..cefb0f663 100644 --- a/mach/m68k4/libem/ari.s +++ b/mach/m68k4/libem/ari.s @@ -1,36 +1,36 @@ .define .sari .define .lari .define .aari +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .aari: - move.l (sp)+,.retari ! return address + move.l (sp)+,d0 ! return address cmp.l #4, (sp)+ ! size of descriptor elements bne 9f - jsr .aar - move.l .retari,-(sp) - rts + move.l d0,-(sp) + jmp .aar .lari: - move.l (sp)+,.retari ! return address + move.l (sp)+,d0 ! return address cmp.l #4, (sp)+ ! size of descriptor elements bne 9f - jsr .lar - move.l .retari,-(sp) - rts + move.l d0,-(sp) + jmp .lar 9: move.w #EILLINS,-(sp) jmp .fat .sari: - move.l (sp)+,.retari ! return address + move.l (sp)+,d0 ! return address cmp.l #4, (sp)+ ! size of descriptor elements bne 9b - jsr .sar - move.l .retari,-(sp) - rts -.data -.retari: .long 0 + move.l d0,-(sp) + jmp .sar + .align 2 diff --git a/mach/m68k4/libem/cii.s b/mach/m68k4/libem/cii.s index fc827aa5a..8523a706a 100644 --- a/mach/m68k4/libem/cii.s +++ b/mach/m68k4/libem/cii.s @@ -1,8 +1,11 @@ .define .cii +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .cii: - movem.l a0/d0/d1,.savreg move.l (sp)+,a0 ! return address move (sp)+,d0 ! destination size sub (sp)+,d0 ! destination - source size @@ -19,6 +22,6 @@ dbf d0,2b 3: move.l a0,-(sp) - movem.l .savreg,a0/d0/d1 rts + .align 2 diff --git a/mach/m68k4/libem/cmi.s b/mach/m68k4/libem/cmi.s index 79616ba5e..37830b936 100644 --- a/mach/m68k4/libem/cmi.s +++ b/mach/m68k4/libem/cmi.s @@ -1,12 +1,15 @@ .define .cmi, .cmi_ +.sect .text +.sect .rom +.sect .data +.sect .bss ! NUM == 4 ! result in d1 - .text + .sect .text .cmi: .cmi_: - move.l (sp)+,.savret - move.l d0,.savd0 + move.l (sp)+,d2 move.l #1,d1 move.l (sp)+,d0 cmp.l (sp)+,d0 @@ -16,7 +19,7 @@ ble 2f neg.l d1 2: - move.l .savd0,d0 - move.l .savret,-(sp) + move.l d2,-(sp) rts + .align 2 diff --git a/mach/m68k4/libem/cmp.s b/mach/m68k4/libem/cmp.s index 61bdabba6..d3a362455 100644 --- a/mach/m68k4/libem/cmp.s +++ b/mach/m68k4/libem/cmp.s @@ -1,9 +1,12 @@ .define .cmp +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .cmp: - move.l (sp)+,.savret ! return address - move.l d0,.savd0 + move.l (sp)+,d2 ! return address move.l #1,d1 move.l (sp)+,d0 cmp.l (sp)+,d0 @@ -13,7 +16,7 @@ bcs 2f neg.l d1 2: - move.l .savd0,d0 - move.l .savret,-(sp) + move.l d2,-(sp) rts + .align 2 diff --git a/mach/m68k4/libem/cms.s b/mach/m68k4/libem/cms.s index 7f134b8cd..b6f4a5109 100644 --- a/mach/m68k4/libem/cms.s +++ b/mach/m68k4/libem/cms.s @@ -1,8 +1,12 @@ .define .cms +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 contains set size - .text + .sect .text .cms: move.l (sp)+,a2 ! return address move.l sp,a0 diff --git a/mach/m68k4/libem/cmu.s b/mach/m68k4/libem/cmu.s index b69ef89cd..9f2051598 100644 --- a/mach/m68k4/libem/cmu.s +++ b/mach/m68k4/libem/cmu.s @@ -1,12 +1,15 @@ .define .cmu +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 : # bytes of 1 block - .text + .sect .text .cmu: - movem.l d2/a0/a1/a2,.savreg - move.l (sp)+,a2 ! reta move.l sp,a0 ! top block - move.l sp,a1 + add.l #4,a0 + move.l a0,a1 add.l d0,a1 ! lower block move.l d0,d2 asr.l #2,d0 @@ -22,8 +25,8 @@ neg.l d1 ! less 3: asl.l #1,d2 + move.l (sp)+,a0 add.l d2,sp ! new sp - move.l a2,-(sp) - movem.l .savreg,d2/a0/a1/a2 - rts + jmp (a0) + .align 2 diff --git a/mach/m68k4/libem/csa.s b/mach/m68k4/libem/csa.s index 3f81ce1c0..b81acb340 100644 --- a/mach/m68k4/libem/csa.s +++ b/mach/m68k4/libem/csa.s @@ -1,8 +1,11 @@ .define .csa +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .csa: - movem.l d0/a0/a1/a2,.savreg move.l (sp)+,a0 ! case descriptor move.l (sp)+,d0 ! index move.l (a0)+,a1 ! default address @@ -21,9 +24,9 @@ beq 2f move.l a1,-(sp) ! jump address 3: - movem.l .savreg,d0/a0/a1/a2 rts ! not a real rts 2: move.w #ECASE,-(sp) jmp .fat + .align 2 diff --git a/mach/m68k4/libem/csb.s b/mach/m68k4/libem/csb.s index 88ed8043f..a5376b18e 100644 --- a/mach/m68k4/libem/csb.s +++ b/mach/m68k4/libem/csb.s @@ -1,8 +1,11 @@ .define .csb +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .csb: - movem.l d0/d1/a0/a1,.savreg move.l (sp)+,a0 ! case descriptor move.l (sp)+,d0 ! index move.l (a0)+,a1 ! default jump address @@ -23,6 +26,5 @@ move.l (a0)+,a1 ! get jump address 4: move.l a1,-(sp) - movem.l .savreg,d0/d1/a0/a1 rts .align 2 diff --git a/mach/m68k4/libem/cuu.s b/mach/m68k4/libem/cuu.s index 3e56221ee..f6587e774 100644 --- a/mach/m68k4/libem/cuu.s +++ b/mach/m68k4/libem/cuu.s @@ -1,8 +1,12 @@ .define .ciu .define .cui .define .cuu +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .ciu: .cui: .cuu: @@ -18,4 +22,5 @@ clr -(sp) dbf d0,2b jmp (a0) + .align 2 diff --git a/mach/m68k4/libem/cvf.s b/mach/m68k4/libem/cvf.s index 59cc742ba..74dcc928c 100644 --- a/mach/m68k4/libem/cvf.s +++ b/mach/m68k4/libem/cvf.s @@ -1,6 +1,10 @@ .define .cfi,.cif,.cfu,.cuf,.cff +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text ! this is a dummy float conversion routine .cfi: @@ -13,4 +17,5 @@ sub (sp)+,d0 ! diff. in sizes sub d0,sp jmp (a0) + .align 2 diff --git a/mach/m68k4/libem/dia.s b/mach/m68k4/libem/dia.s index a9d7a0bd3..fd06f9c64 100644 --- a/mach/m68k4/libem/dia.s +++ b/mach/m68k4/libem/dia.s @@ -1,12 +1,16 @@ .define .diagnos +.sect .text +.sect .rom +.sect .data +.sect .bss space = 040 del = 0177 - .text + .sect .text .diagnos: move.l hol0,-(sp) - move.l hol0+FILN_AD,d2 + move.l hol0+4,d2 beq 1f move.l d2,a0 move.l #40,d0 @@ -31,7 +35,7 @@ del = 0177 move.l #unknwn,d2 bra 2b - .data + .sect .data fmt: .asciz "%s, line %d: " unknwn: .asciz "unknown file" .align 2 diff --git a/mach/m68k4/libem/dvi.s b/mach/m68k4/libem/dvi.s index fc74fb4dd..b1d5ed932 100644 --- a/mach/m68k4/libem/dvi.s +++ b/mach/m68k4/libem/dvi.s @@ -1,12 +1,15 @@ .define .dvi +.sect .text +.sect .rom +.sect .data +.sect .bss ! signed long divide - .text + .sect .text .dvi: - movem.l d0/d4,.savdvi - move.l (sp)+,.retdvi - move.l (sp)+,d0 - move.l (sp)+,d1 + move.l 4(sp),d0 + move.l 8(sp),d1 + move.l d4,-(sp) clr.l d4 tst.l d0 ! divisor bpl 1f @@ -32,11 +35,10 @@ bpl 6f neg.l d2 ! remainder 6: - movem.l .savdvi,d0/d4 - move.l .retdvi,-(sp) + move.l (sp)+,d4 + move.l (sp)+,a0 + add.l #8,sp + move.l a0,-(sp) rts -.data -.savdvi: .space 12 -.retdvi: .long 0 -.text + .align 2 diff --git a/mach/m68k4/libem/dvu.s b/mach/m68k4/libem/dvu.s index 9f595d6fe..87b0e911a 100644 --- a/mach/m68k4/libem/dvu.s +++ b/mach/m68k4/libem/dvu.s @@ -1,4 +1,8 @@ .define .dvu +.sect .text +.sect .rom +.sect .data +.sect .bss ! unsigned long divide ! register usage: @@ -6,12 +10,11 @@ ! d1 dividend ! exit : d1 quotient ! d2 remainder - .text + .sect .text .dvu: - movem.l d0/d3,.savreg - move.l (sp)+,.savret - move.l (sp)+,d0 - move.l (sp)+,d1 + move.l 4(sp),d0 + move.l 8(sp),d1 + move.l d3,-(sp) tst.l d0 bne 0f move.w #EIDIVZ,-(sp) @@ -28,7 +31,10 @@ add #1,d1 4: dbf d3,3b - movem.l .savreg,d0/d3 - move.l .savret,-(sp) + move.l (sp)+,d3 + move.l (sp)+,a0 + add.l #8,sp + move.l a0,-(sp) rts + .align 2 diff --git a/mach/m68k4/libem/end.s b/mach/m68k4/libem/end.s index 9225bd8c9..37e1cef2c 100644 --- a/mach/m68k4/libem/end.s +++ b/mach/m68k4/libem/end.s @@ -1,15 +1,16 @@ -.define endtext,enddata,endbss -.define _end, _etext, _edata +.define endtext,enddata,endbss,_etext,_edata,_end +.sect .text +.sect .rom +.sect .data +.sect .bss +.sect .end ! only for declaration of _end and endbss. - .text + .sect .text endtext: _etext: - .align 4 - .data + .sect .data enddata: _edata: - .align 4 - .bss - .align 4 -endbss: + .sect .end _end: +endbss: diff --git a/mach/m68k4/libem/exg.s b/mach/m68k4/libem/exg.s index 0107f799e..396893b6e 100644 --- a/mach/m68k4/libem/exg.s +++ b/mach/m68k4/libem/exg.s @@ -1,10 +1,13 @@ .define .exg +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 : exchange size in bytes - .text + .sect .text .exg: - move.l (sp)+,.savret - movem.l d1/a1/a2,.savreg + move.l (sp)+,d2 move.l sp,a1 sub.l d0,sp move.l sp,a2 @@ -21,6 +24,5 @@ sub #1,d1 bgt 1b move.l a1,sp - movem.l .savreg,d1/a1/a2 - move.l .savret,-(sp) + move.l d2,-(sp) rts diff --git a/mach/m68k4/libem/fat.s b/mach/m68k4/libem/fat.s index e6fbbb032..670a3cf60 100644 --- a/mach/m68k4/libem/fat.s +++ b/mach/m68k4/libem/fat.s @@ -1,6 +1,10 @@ .define .fat +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .fat: jsr .trp jmp EXIT diff --git a/mach/m68k4/libem/inn.s b/mach/m68k4/libem/inn.s index 83e1c9256..2e7452879 100644 --- a/mach/m68k4/libem/inn.s +++ b/mach/m68k4/libem/inn.s @@ -1,16 +1,19 @@ .define .inn +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 : set size in bytes ! d1 : bitnumber - .text + .sect .text .inn: - movem.l d1/d2/a0/a1,.savreg - move.l (sp)+,.savret + move.l (sp)+,a1 move.l (sp)+,d1 - move.l sp,a1 - add.l d0,a1 + move.l d0,-(sp) move.l sp,a0 + add.l #4,a0 move.l d1,d2 asr.l #4,d2 !bchg.l #0,d2 @@ -25,7 +28,7 @@ 1: clr.l d0 2: - move.l a1,sp - movem.l .savreg,d1/d2/a0/a1 - move.l .savret,-(sp) + move.l (sp)+,d1 + add.l d1,sp + move.l a1,-(sp) rts diff --git a/mach/m68k4/libem/lfr.s b/mach/m68k4/libem/lfr.s index 51c066976..82e9d8153 100644 --- a/mach/m68k4/libem/lfr.s +++ b/mach/m68k4/libem/lfr.s @@ -1,6 +1,10 @@ .define .lfr +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .lfr: move.l (sp)+,a0 cmp #2,d7 diff --git a/mach/m68k4/libem/los.s b/mach/m68k4/libem/los.s index c15dc814d..8ae239a2c 100644 --- a/mach/m68k4/libem/los.s +++ b/mach/m68k4/libem/los.s @@ -1,11 +1,14 @@ .define .los +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 : # bytes ! a0 : source address - .text + .sect .text .los: - movem.l d0/a0,.savreg - move.l (sp)+,.savret + move.l (sp)+,a1 move.l (sp)+,d0 move.l (sp)+,a0 cmp.l #1,d0 @@ -30,7 +33,5 @@ sub.l #1,d0 bgt 4b 3: - movem.l .savreg,d0/a0 - move.l .savret,-(sp) - rts + jmp (a1) .align 2 diff --git a/mach/m68k4/libem/mli.s b/mach/m68k4/libem/mli.s index fe2e0ddce..27ed589b3 100644 --- a/mach/m68k4/libem/mli.s +++ b/mach/m68k4/libem/mli.s @@ -1,12 +1,15 @@ .define .mli +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .mli: - move.l d5,.savmli - move.l (sp)+,.retmli - move.l (sp)+,d1 - move.l (sp)+,d0 + move.l 4(sp),d1 + move.l 8(sp),d0 + move.l d5,-(sp) clr d5 tst.l d0 bpl 1f @@ -26,11 +29,9 @@ neg.l d1 negx.l d0 3: - move.l .savmli,d5 - move.l .retmli,-(sp) - rts -.data -.savmli: .long 0 -.retmli: .long 0 -.text + move.l (sp)+,d5 + move.l (sp)+,a0 + add.l #8,sp + jmp (a0) + .align 2 diff --git a/mach/m68k4/libem/mlu.s b/mach/m68k4/libem/mlu.s index 0235ec262..5c0a4f600 100644 --- a/mach/m68k4/libem/mlu.s +++ b/mach/m68k4/libem/mlu.s @@ -1,20 +1,24 @@ .define .mlu +.sect .text +.sect .rom +.sect .data +.sect .bss ! entry : d0 multiplicand ! d1 multiplier ! exit : d0 high order result ! d1 low order result - .text + .sect .text .mlu: - move.l (sp)+,.savret - move.l (sp)+,d1 - move.l (sp)+,d0 + movem.l d3/d4/d6,-(sp) + move.l 16(sp),d1 + move.l 20(sp),d0 cmp.l #32768,d0 bgt 1f cmp.l #32768,d1 bls 2f -1: movem.l d2/d3/d4/d6,.savreg +1: move.l d1,d3 move.l d1,d2 swap d2 @@ -36,12 +40,13 @@ swap d2 swap d3 add.l d2,d0 - add.l d3,d0 - movem.l .savreg,d2/d3/d4/d6 - move.l .savret,-(sp) - rts + add.l d3,a0 + bra 3f 2: mulu d0,d1 clr d0 - move.l .savret,-(sp) - rts +3: + movem.l (sp)+,d3/d4/d6 + move.l (sp)+,a0 + add #8,sp + jmp (a0) .align 2 diff --git a/mach/m68k4/libem/mon.s b/mach/m68k4/libem/mon.s index dabe65a92..38114a756 100644 --- a/mach/m68k4/libem/mon.s +++ b/mach/m68k4/libem/mon.s @@ -1,12 +1,17 @@ .define .mon - .text +.sect .text +.sect .rom +.sect .data +.sect .bss + + .sect .text .mon: move.l (sp)+,a0 pea fmt jsr .diagnos - add #6,sp + add #8,sp jmp EXIT - .data + .sect .data fmt: .asciz "system call %d not implemented" .align 2 diff --git a/mach/m68k4/libem/nop.s b/mach/m68k4/libem/nop.s index ed7720d13..d701c49f1 100644 --- a/mach/m68k4/libem/nop.s +++ b/mach/m68k4/libem/nop.s @@ -1,6 +1,10 @@ .define .nop +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .nop: pea 4(sp) move.l hol0,-(sp) @@ -9,6 +13,6 @@ add.l #12,sp rts - .data + .sect .data fmt: .asciz "test %d, sp %d\n" .align 2 diff --git a/mach/m68k4/libem/printf.s b/mach/m68k4/libem/printf.s index 6a500944a..9de6290ad 100644 --- a/mach/m68k4/libem/printf.s +++ b/mach/m68k4/libem/printf.s @@ -1,78 +1,125 @@ +.sect .text;.sect .rom;.sect .data;.sect .bss +.define _printn .define _printf -.define _putchar -.define _getal -.define _char -.bss -_getal: - .space 12 -_char: - .space 1 - .align 2 -.data -sav: - .long 0 -.text -_printf: - movem.l d0/d1/d2/a0/a1/a2/a3/a4/a5/a6,.savreg - move.l (sp)+,sav !return address - move.l sp,a6 !a6 <- address of arguments - move.l (a6)+,a5 !a5 <- address of format - clr.l d0 !d0 <- char to be printed -next: move.b (a5)+,d0 - beq out - cmp.b #'%',d0 - beq procnt -put: move.l d0,-(sp) - jsr _putchar !argument is long en op de stack - tst.l (sp)+ - jmp next - -procnt: move.b (a5)+,d0 - cmp.b #'d',d0 !NOTE: %d means unsigned. - beq digit - cmp.b #'s',d0 - beq string - cmp.b #'%',d0 !second % has to be printed. - beq put - tst.b -(a5) !normal char should be printed - jmp next - -string: move.l (a6)+,a2 !a2 <- address of string -sloop: move.b (a2)+,d0 - beq next - move.l d0,-(sp) - jsr _putchar !argument is long en op de stack - tst.l (sp)+ - jmp sloop - -digit: move.l (a6)+,d1 !d1 <- integer - move.l #_getal+12,a3 !a3 <- ptr to last part of buf - move.b #0,-(a3) !stringterminator -dloop: move.l d1,-(sp) - move.l #10,-(sp) - jsr .dvu !d1 <- quotient d2 <- remainder - add.l #'0',d2 - move.b d2,-(a3) - tst.l d1 !if quotient = 0 then ready - bne dloop - move.l a3,a2 - jmp sloop !print digitstring. - -out: - move.l sav,-(sp) - movem.l .savreg,d0/d1/d2/a0/a1/a2/a3/a4/a5/a6 - rts - - +.extern _printf +.sect .text _putchar: - movem.l d0,.savreg - move.l 4(sp),d0 - move.b d0,_char - move.l #1,-(sp) - move.l #_char,-(sp) - move.l #1,-(sp) - jsr _write - add.l #12,sp - movem.l .savreg,d0 - rts -.align 2 +move.l #1,-(sp) +pea 9(sp) +move.l #1,-(sp) +jsr _write +add.l #12,sp +rts +_printf: +tst.b -56(sp) +link a6,#-16 +!Local -4 into d7 +!Local -12 into d6 +!Local -8 into a5 +!Local 8 into a4 +!Local -16 into a3 +movem.l d7/d6/a5/a4/a3,-(sp) +move.l 8(a6),a4 +lea 12(a6),a1 +move.l a1, a5 +I0014: +move.l a4, a0 +add.l #1,a4 +clr.l d0 +move.b (a0),d0 +move.l d0, d7 +cmp.l #37,d7 +beq I0015 +tst.l d7 +beq I0012 +move.l d7,-(sp) +jsr _putchar +add #4,sp +jmp I0014 +I0015: +move.l a4, a0 +add.l #1,a4 +clr.l d0 +move.b (a0),d0 +move.l d0, d7 +cmp.l #100,d7 +beq I0018 +cmp.l #117,d7 +bne I0017 +I0018: +move.l a5, a0 +add.l #4,a5 +move.l (a0), d6 +cmp.l #100,d7 +bne I0019 +tst.l d6 +bge I0019 +clr.l d2 +sub.l d6,d2 +move.l d2, d6 +pea 45 +jsr _putchar +add #4,sp +I0019: +move.l d6,-(sp) +jsr _printn +add #4,sp +jmp I0014 +I0017: +cmp.l #115,d7 +bne I0014 +move.l a5, a0 +add.l #4,a5 +move.l (a0), a3 +I001c: +move.l a3, a0 +add.l #1,a3 +clr.l d0 +move.b (a0),d0 +move.l d0, d7 +tst.l d7 +beq I0014 +move.l d7,-(sp) +jsr _putchar +add #4,sp +jmp I001c +I0012: +movem.l (sp)+,d7/d6/a5/a4/a3 +unlk a6 +rts +.extern _printn +_printn: +tst.b -44(sp) +link a6,#-4 +!Local -4 into d7 +move.l d7,-(sp) +.sect .data +_14: +.data4 808530483 +.data4 875902519 +.data4 943259648 +.sect .text +move.l 8(a6),-(sp) +pea 10 +jsr .dvu +move.l d1, d7 +tst.l d7 +beq I0023 +move.l d7,-(sp) +jsr _printn +add #4,sp +I0023: +pea _14 +move.l 8(a6),-(sp) +pea 10 +jsr .dvu +move.l (sp)+,a1 +add.l d2,a1 +clr.l d0 +move.b (a1),d0 +move.l d0,-(sp) +jsr _putchar +add #4,sp +move.l (sp)+,d7 +unlk a6 +rts diff --git a/mach/m68k4/libem/rck.s b/mach/m68k4/libem/rck.s index 6d935e865..5b55a91c0 100644 --- a/mach/m68k4/libem/rck.s +++ b/mach/m68k4/libem/rck.s @@ -1,9 +1,12 @@ .define .rck +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .rck: - movem.l d0/a0,.savreg - move.l (sp)+,.savret + move.l (sp)+,a1 move.l (sp)+,a0 ! descriptor address move.l (sp),d0 cmp.l (a0),d0 @@ -14,7 +17,6 @@ move.l #ERANGE,-(sp) jsr .trp 2: - movem.l .savreg,d0/a0 - move.l .savret,-(sp) - rts + jmp (a1) + .align 2 diff --git a/mach/m68k4/libem/ret.s b/mach/m68k4/libem/ret.s index ba5c2f038..2e5bd189c 100644 --- a/mach/m68k4/libem/ret.s +++ b/mach/m68k4/libem/ret.s @@ -1,6 +1,10 @@ .define .ret +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .ret: beq 3f cmp #2,d0 diff --git a/mach/m68k4/libem/set.s b/mach/m68k4/libem/set.s index c5c6038b8..4091243a4 100644 --- a/mach/m68k4/libem/set.s +++ b/mach/m68k4/libem/set.s @@ -1,11 +1,14 @@ .define .set +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 : setsize in bytes ! d1 : bitnumber - .text + .sect .text .set: - movem.l d1/d2/a1,.savreg - move.l (sp)+,.savret + move.l (sp)+,a0 move.l (sp)+,d1 move.l d0,d2 asr.l #2,d2 @@ -20,13 +23,10 @@ cmp.l d0,d2 bcs 1f move.w #ESET,-(sp) - move.l .savret,-(sp) - jmp .trp + jsr .trp 1: add.l d2,a1 move.l (a1),d2 bset d1,d2 move.l d2,(a1) - movem.l .savreg,d1/d2/a1 - move.l .savret,-(sp) - rts + jmp (a0) diff --git a/mach/m68k4/libem/shp.s b/mach/m68k4/libem/shp.s index 2e60f1b02..a4be67335 100644 --- a/mach/m68k4/libem/shp.s +++ b/mach/m68k4/libem/shp.s @@ -1,9 +1,12 @@ .define .strhp +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .strhp: - move.l d0,.savreg - move.l (sp)+,.savret + move.l (sp)+,a0 move.l (sp)+,d0 ! heap pointer move.l d0,.reghp cmp.l .limhp,d0 @@ -14,9 +17,7 @@ cmp.l d0,sp ble 2f 1: - move.l .savreg,d0 - move.l .savret,-(sp) - rts + jmp (a0) 2: move.w #EHEAP,-(sp) jmp .fat diff --git a/mach/m68k4/libem/sig.s b/mach/m68k4/libem/sig.s index 491d0cf5f..2d5afad57 100644 --- a/mach/m68k4/libem/sig.s +++ b/mach/m68k4/libem/sig.s @@ -1,13 +1,14 @@ .define .sig +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .sig: - movem.l a1/a2,.savreg - move.l (sp)+,.savret + move.l (sp)+,a0 move.l (sp)+,a1 ! trap pc move.l .trppc,-(sp) move.l a1,.trppc - movem.l .savreg,a1/a2 - move.l .savret,-(sp) - rts + jmp (a0) .align 2 diff --git a/mach/m68k4/libem/sts.s b/mach/m68k4/libem/sts.s index 17d788073..fe63e2b0f 100644 --- a/mach/m68k4/libem/sts.s +++ b/mach/m68k4/libem/sts.s @@ -1,11 +1,14 @@ .define .sts +.sect .text +.sect .rom +.sect .data +.sect .bss ! d0 : # bytes ! a0 : destination address - .text + .sect .text .sts: - movem.l d0/a0,.savreg - move.l (sp)+,.savret + move.l (sp)+,a1 move.l (sp)+,d0 move.l (sp)+,a0 cmp #1,d0 @@ -27,7 +30,5 @@ move.l (sp)+,(a0)+ dbf d0,3b 4: - movem.l .savreg,d0/a0 - move.l .savret,-(sp) - rts + jmp (a1) .align 2 diff --git a/mach/m68k4/libem/sys1.s b/mach/m68k4/libem/sys1.s index 99cd63043..49a3d7590 100644 --- a/mach/m68k4/libem/sys1.s +++ b/mach/m68k4/libem/sys1.s @@ -1,18 +1,22 @@ .extern _errno -.data +.sect .text +.sect .rom +.sect .data +.sect .bss +.sect .data _errno: .extern _lseek .short 0 -.text +.sect .text _lseek: link a6,#-0 -.data +.sect .data _13: .short 29561 .short 29489 .short 11875 .short 0 -.text +.sect .text move.l #_13,.filn move.w #8,.lino move.w #0,-(sp) diff --git a/mach/m68k4/libem/sys2.s b/mach/m68k4/libem/sys2.s index fce0ee6e0..661f2fb57 100644 --- a/mach/m68k4/libem/sys2.s +++ b/mach/m68k4/libem/sys2.s @@ -1,7 +1,11 @@ .extern _exit +.sect .text +.sect .rom +.sect .data +.sect .bss ! Fake system call for 68000 running MACSBUG -.text +.sect .text _exit: jmp 0x0200f6 diff --git a/mach/m68k4/libem/trp.s b/mach/m68k4/libem/trp.s index 6afacad17..0978c898d 100644 --- a/mach/m68k4/libem/trp.s +++ b/mach/m68k4/libem/trp.s @@ -1,31 +1,41 @@ .define .trp +.sect .text +.sect .rom +.sect .data +.sect .bss - .text + .sect .text .trp: - move.l (sp)+,a2 ! return address - move.l (sp)+,d0 ! error number - move.l a2,-(sp) - move.l d0,-(sp) - cmp.l #16,d0 + cmp.l #16,4(sp) bcc 1f + move.l d0,-(sp) + move.l 8(sp),d0 btst d0,.trpim bne 3f 1: + move.l a0,-(sp) move.l .trppc,a0 move.l a0,d0 beq 9f clr.l .trppc + move.l 12(sp),-(sp) jsr (a0) + add.l #4,sp + move.l (sp)+,a0 3: - add #4,sp + move.l (sp)+,d0 + move.l (sp)+,(sp) rts 9: + move.l (sp)+,a0 + move.l (sp)+,d0 + move.l 4(sp),-(sp) pea fmt jsr .diagnos add #4,sp jsr __cleanup jmp EXIT - .data + .sect .data fmt: .asciz "trap %d called\n" .align 2