;ADSM1.SR2, source code for ADSM.200/.100 Part 2 ;James Yi 73327,1653 -- 07/27/88 ;Modified by Mike Audleman 73577,3041 -- 03/17/90 ; Added CLS Command ; Added LFILES x Command (M200 & M100 w/o DVI do FILES) ; Added DVI screen compatibility begin mvi a,12 call wrlcd mvi a,1 call maxfil call setmax lxi h,errtn shld errtrp lxi h,Fnk CALL DefFnk lhld varspc k42 mov a,m ora a jz rcsmb mvi c,3 sub c mov b,a k41 inx h mov a,m call tst2+1 jnc mntr dcr b jnz k41 dad b jmp k42 jot push d call openfl pop d call wrln+3 clob mvi a,$1a call wrbyt if m,2 ;close option bank file lhld num0 lxi b,lcd dsub b mov a,l cnz svlo endif reent call bell call uptdir mntr call close call restak lhld varend rcsmb call updvpt lxi h,ifef mvi b,6 call zerob dcr a mvi b,4 call zerob+1 lxi b,mntr push b lhld adrptr call putadt call set mvi a,$FF call mlbl mvi m,':' call put0+1 call crlfc lxi h,botrow call setcur call prnbfr CALL InpN RST 2 xchg JZ CR sui '+' jz reljmp dcr a jz list dcr a jz reljmp lxi h,flnmc inx d sui 15 jz view dcr a xchg jz storg xchg dcr a jz jot CALL AsmLin lhld fp1 jmp updadp reljmp call cnvnum mov b,h mov c,l call incptr+6 jmp updadp List xchg call getlen mvi d,lcdsiz-1 k5 push d call prladv call breakp pop d dcr d jnz k5 dcr e jnz list+3 ret gettrc ani 15 sta trptr mov l,a mvi h,0 dad h lxi d,trace dad d xchg lhlx ret prladv call prndsm call incptr putadt lda trptr push h call gettrc pop b dsub b push b jz k24 inr a call gettrc k24 pop h shlx updadp shld adrptr ret cr lxi h,botrow-1 call setcur lda pkgff ani 3 jz prladv rar lda trptr inr a jnc stepad sui 2 stepad call gettrc shld adrptr Prndsm lhld adrptr call set lxi b,$ffff CALL DsmLin Prnbfr lxi h,Bufr printc call crlfc jmp print view inr a call openfl+2 vwchr call rdbyt cpi 26 jz reent call wrlcd call breakp jmp vwchr Asmble LXI H,soprmt CALL orgfil lxi h,obprmt+1 lxi d,flnmb call secfil LXI H,Wkspc shld top shld exe CALL Inzlbl STA Pass Asmlp lxi h,ifef mvi b,4 call zerob inr a mov m,a lxi h,flnma call Openfl+2 lhld top shld mp1 ;Load a line from source Load call Breakp LXI D,Bufr k2 CALL Rdln STAX D INX D JNZ k2 Call AsmLin LDA Eof ora a JnZ Load lxi h,Pass cmp m jnz reent INR m mov d,a mov e,a call close lhld top mov b,h mov c,l lhld mp1 dsub b shld len call prparm lxi h,flnmb-1 rst 2 jc reent call fmtfnm call FindCO cnz Kill call uptdir call SaveCO call FindCO lxi h,6 dad d shld fp0 shld fp1 JMP Asmlp orgfil mvi a,12 rst 4 call files lxi d,flnma secfil push d call inpfnm pop d storg mvi b,15 jmp mvhbi inpfnm call printc call inpa rst 2 rnz jmp mntr fmtfnm if m,2 mvi a,$ff sta bnk1 push h call caps-1 cpi 'R' jnz k1 rst 2 sui 49 cpi 3 jnc k1 mov c,a inx h mov a,m cpi ':' jnz k1 mov a,c rlc rlc sta bnk1 inx h xthl k1 pop h endif getfil call getlen jmp getfnm Openfl mvi a,2 push psw mvi a,1 call closei call fmtfnm jnz devok mvi d,$f8 devok pop psw mov e,a dcr a jz input mov a,d cpi $f9 jnc input mvi e,8 input if m,2 inzlp lxi h,lcd shld num0 db 62 bnk1 db 0 ora a jp obfl endif lxi h,null mvi a,1 jmp open if m,2 ;open file in other bank obfl push d di call setfr in $d8 ani 12 out $90 push psw lda bnk1 out $91 push psw lxi h,flnm mov d,h mov e,l lxi b,6 call datfr lxi d,obcall lxi h,lcd+256 call mvdbi mvi b,2 dsub call endtfr pop psw pop h pop b call lcd+256 ei jc omerr rnz jmp fferr obcall out $d8 dmov d,sp+0 cmp h mov a,h jz sameb lhld stkval sphl sameb push d push psw call obrtn+offset pop h mov a,h pop h out $d8 sphl xchg updop shld xp1 ret offset equ -obcall+lcd+256 obrtn dcr c jnz obsv+offset call uptdir jmp finddo obsv jp obout+offset db 33 xp1 dw 0 db 1 dlen dw 0 call insert rc lxi d,lcd xchg call mvhci ora d ret obout lhld frespc desp 0 dcr d rst 3 cmc rc xra a sta flnm+6 lxi h,flnm call opendo call geteof xchg ora d ret endif Rdln call RdByt cpi 10 jz Rdln sui 13 rz adi 13 cpi 26 rnz End xra a sta eof ret if m,2 ;Get one byte from source file RdByt lda bnk1 ora a jm readio lhld xp1 MOV B,A di push d CALL PkBnk+1 ei MOV A,D pop d inx h jmp updop endif ;Assemble one line AsmLin lxi h,opcd shld comove call asmins Stout lda oplen mov c,a mvi b,0 inr a jnz itn lhld num0 mov b,h mov c,l itn LDA Pass ora A JZ IncPtr+6 MOV A,b ORA c rz call incptr+6 dsub xchg lhld comove lda oplen inr a jnz mvhbci xchg jmp zerobc incptr lda oplen mov c,a mvi b,0 lxi d,mp1 lhlx dad b shlx inx d inx d lhlx dad b shlx ret asmins LXI D,Bufr XRA A STA OpLen lda ifef ora a jz noif call sep cpi 'I' jnz findef inx d ldax d ani $df cpi 'F' jz incif dcx d findef lxi h,eistr mvi c,5 cmpe ldax d ani $df ;caps cmp m rnz inx d inx h dcr c jnz cmpe endif lxi h,ifcnt xra a cmp m jz nferr dcr m rnz dcx h mov m,a ret noif CALL Tst1 RM JC LA CALL Tst2 JNC L7 lda pass ora a jz dderr CALL Cnvnum call set JMP L8 LA PUSH D CALL Sep CPI 'E' JNZ L6 INX D ldax d ani $df CPI 'Q' JZ defequ L6 LHLD mp1 POP D CALL DefLbl L7 CALL Sep L8 RM alpopc LXI H,InDat LE MOV A,M ORA A JZ snerr PUSH D CPI 32 JNZ LB INX H MOV C,M INX H MOV B,M INX H LB LDAX D CALL Caps CMP M INX H INX D JZ LB DCX H CALL tst2+1 JC LC MOV A,M CPI 5 JC Lf LC MOV A,M INX H CPI 5 JNC LC INX H MOV A,M CPI $20 POP d JC LD CPI $60 JC LE LD INX H JMP LE LF POP D PUSH B INX H MOV C,M INX H MOV B,M MOV H,A MVI L,0 Sep CALL Tst1 RM JZ L04 INX D JMP Sep L04 INX D CALL Tst1 JZ L04 RET Com lda pass ora a mov a,h jnz ok cpi 3 jnc iderr ok rar PUSH B JC Cnvnum RET db call read dsub shld comove mov a,c setopl sta oplen ret ds mvi a,$ff jmp setopl DW shld opcd mvi a,2 jmp setopl DM xchg shld comove CALL GetLen mov c,e jmp setopl-1 ORG shld mp1 shld top push h lhld fp0 shld fp1 lxi h,ocnt mov a,m ora a jnz bserr inr m pop h ent shld exe ret set shld mp1 jmp set2 Dmov CALL Sep PUSH PSW CALL NxMk inx d POP PSW CPI 'H' JZ opr+3 MVI C,$38 JMP opr+3 RST SUI 48 ani 7 push psw call sep cp inrh pop psw Jmp opr+2 Mov CALL RegInc PUSH PSW CALL Sep LXI B,$100 INR H CALL RegInc POP B ADD B STA OpCd RET Lxi PUSH PSW CALL Sep POP PSW Xeg push h lxi h,dbldat-1 jmp L107 Mvi PUSH PSW CALL Sep POP PSW RegInc PUSH H LXI H,Regdat-1 L107 inx h cmp m jc snerr inx h jnz L107 opr mov a,m pop h mov l,a MOV A,H STA OpLen MOV A,C sub b Lj add b DCR L Jp Lj STA OpCd DCR H RZ LDA Pass ora a Rz CnvNum CALL Tst1 JM moerr lxi h,0 LL SHLD Num1 CALL Tst1 RM JZ Sep ldax d cpi '(' jz k86 cpi ')' jnz k85 inx d push h lxi h,prvsgn mov a,m mvi m,0 lhld num2 shld num1 pop h jmp calc k85 CALL Tst2+1 CNC InxD k86 PUSH PSW CALL Val POP PSW JC LL calc PUSH D call on SHLD Num0 POP D JMP LL on MOV B,H MOV C,L xchg LHLD Num1 sui '!' jz eor dcr a jz or sui 8 jz mult DAD B dcr a rz DSUB B DSUB B sui 2 rz DAD B dcr a jz and dcr a xchg rnz div xchg MOV A,B ORA C JZ d0err LXI D,$FFFF Lv DSUB B INX D JNC Lv xchg ret mult xchg mov h,a mov l,a Lt MOV A,B ORA C rZ DCX B DAD D JMP Lt eor mov a,l xra e mov l,a ret or mov a,l ora e mov l,a ret and mov a,l ana e mov l,a ret Val LXI H,0 SHLD Num0 CALL Tst1 rm cpi ''' jz k84 cpi '(' jnz lw inx d pop h pop psw stc push psw push h sta prvsgn lhld num1 shld num2 lxi h,0 ret k84 INX D ldax d Mov l,a SHLD Num0 inx d JMP nxmk Lw MOV H,A push d CALL Nxmk DCX D MVI C,16 ldax d ani 223 cpi 'H' jz lx MOV A,H CPI '$' JZ lx+1 MVI C,$A CALL Tst1 JNC Lx+1 LXI H,NumDat Ly MOV C,M DCR C JM eqlbl+1 INX H CMP M INX H JNZ Ly lx DCX D MOV A,C PUSH PSW sui 16 jz hxb db 62 stc hxb sta ck16 LXI B,1 Lz LHLD Num0 CALL Tst2 DCX D JNC Done cpi '$' jz done sui 48 cpi 10 JC L02 ck16 db 0 jc eqlbl SUI 7 cpi 10 jc eqlbl cpi 16 jnc eqlbl L02 DAD B DCR A JP L02 DSUB B SHLD Num0 LXI H,0 POP PSW PUSH PSW L03 DAD B DCR A JNZ L03 MOV B,H MOV C,L JMP Lz EqLbl pop psw pop d CALL GetLbl jc lbld lda ifnum mov h,a LDA Pass ora h ldax d Jnz ulerr lbld lhld num0 db 1 Done pop psw pop d NxMk INX D CALL Tst2 JC NxMk RET errtn push d mov l,e call close mov a,l cpi 52 jnz notff lxi h,flnma call printc notff Cnz PrnBfr call Beep lxi h,ermsg call printc pop h mvi h,0 call prnhl jmp mntr defequ CALL Sep CALL Cnvnum POP D DefLbl PUSH H CALL Getlbl pop b JNC L06 LDA pass ORA A JZ bserr mov m,c inx h mov m,b RET L06 push d push h push b push d dmov d,sp+0 dcr d rst 3 jnc OMerr pop d mvi c,3 inx h l08 CALL tst2 JNC L07 mov m,a INX h INX D inr c JMP L08 L07 pop d mov m,e inx h mov m,d inx h call updvpt pop h mov m,c pop d ret del ldax d cpi '*' jz inzlbl call getlbl jz ulerr inx h inx h mov d,b mov e,c mov b,h mov c,l push h lhld frespc dsub b mov b,h mov c,l pop h inx b call mvhbci xchg dcx h jmp updvpt ;Clear label space InzLbl LHLD Varspc updvpt shld varend xra a mov m,a inx h shld frespc ret getlbl lhld varspc cmpnxt mov a,m ora a rz push d push h mov c,m mov b,c inx h k40 ldax d call caps cmp m inx d inx h jnz nextlb dcr b mov a,b cpi 4 jnc k40 call tst2 jc nextlb xchg lhlx shld num0 xchg pop b pop d stc ret nextlb pop h mvi b,0 dad b pop d jmp cmpnxt Tst1 LDAX D ORA A JZ L13 CPI ';' JNZ L14 L13 ORI $80 RET L14 CPI 9 RZ CPI ',' RZ CPI ' ' RZ cpi '=' rz L15 cpi 'a' jc k80 cpi 'z'+1 jnc k80 ani 223 k80 CPI '?' cmc Jnc L16 CPI '_'+1 L16 INR A DCR A RET Tst2 LDAX D CALL L15 RC CPI '$' STC RZ CPI ''' STC RZ CPI '0' CMC RNC CPI '9'+1 RET call respp GetMnc MOV B,A CPI $76 JZ Getopc+1 ANI $C7 CPI 6 JNZ L17 GetHIC CALL GetOHR InsC MVI M,',' JMP Put0+1 L17 CPI $C7 JNZ L18 CALL Getopc+1 MOV A,B RRC RRC RRC ANI 7 adi 48 mov m,a inx h lxi b,rfix-48 add c mov c,a cc inrb ldax b sta oplen dcr a jz put0+2 mvi m,',' jmp put0+1 L18 CPI 5 JZ GetOHR CPI 4 JNZ L19 GetOHR CALL Getopc+1 MOV A,B GetHR RRC RRC RRC JMP GetLR+1 L19 MOV A,B ANI $CF CPI $C1 JZ L20 CPI $C5 JNZ L21 L20 CALL GetOXR MVI M,'P' INX H MVI M,'S' INX H MVI M,'W' JMP Put0+1 L21 CPI $A JZ L22 CPI 2 JNZ L23 L22 MOV C,A MOV A,B ANI 32 JNZ Getopc MOV A,C CALL Getopc+1 MOV A,B ANI 16 JMP GetHR if m,2 LINK R2:adsm2 endif if m,1 SAVECO CALL $2089 CNZ $1FD9 CALL $20E4 PUSH H LHLD $FBB0 PUSH H LHLD $FAD0 MOV A,H ORA L JZ $3F17 PUSH H LXI B,6 DAD B MOV B,H MOV C,L LHLD $FBB2 SHLD $FB99 CNC $6B6D JC $3F17 XCHG LXI H,$FACE CALL $2540 LHLD $FACE POP B CALL $6BDB POP H SHLD $FBB0 POP H MVI A,$A0 XCHG LHLD $FB99 XCHG CALL $2239 CALL $2146 LHLD $FB8E RET TICK EQU 7676h BELL: DI MVI D,0 S2 MVI E,$28 S1 DCR E JNZ S1 CALL TICK DCR D JNZ S2 EI RET InrB inr b ret InrA inr a ret exit jmp menu Killc0 equ $1FBF Kill80 equ $2017 Kill00 equ $1FD9 Kill mov a,m inx h mov e,m inx h mov d,m dcx h dcx h cpi $c0 jz killc0 cpi $80 jz kill80 jmp kill00 endif link 1:adsm1.sr3