* * SuperMON 64 * * Original source code courtesy Jim Butterfield * * Merlinized and adapted for the SuperCPU by * Stephen L. Judd * 3/14/97 * *rem"s= dsave"@super64.src2" *rem;open 8,8,8,"1:listing,s,w" *sys7*4096 ;.opt p8 ; supermon 64 sept 9/83 ;*= $9824 ORG $9824 savx = $1c tmpc = $1d nemo = $1e length = $1f psav = $20 wrap = $26 aflg = $28 acmd = $2a satus = $90 lvflag = $93 indev = $99 outdev = $9a eal = $ae eah = $af fnlen = $b7 wtype = $b9 fa = $ba fnadr = $bb tmp0 = $c1 tmp2 = $c3 inbuf = $0100 stage = $0210 addrs = $0240 pch = $0239 pcl = $023a flgs = $023b acc = $023c xr = $023d yr = $023e sp = $023f bkvec = $0316 ready = $a002 ldvec = $0330 svvec = $0332 setmsg = $ff90 rdt = $ffcf wrt = $ffd2 stop1 = $ffe1 ; ** initialization ** super lda linkad sta bkvec lda linkad+1 sta bkvec+1 lda #$80 jsr setmsg brk ; ** break entry ** break cld cli pla sta yr pla sta xr pla sta acc pla sta flgs pla tax pla tay sec txa sbc #$02 sta pcl tya sbc #0 sta pch tsx stx sp jsr crlf ldx #$42 lda #$2a jsr wrtwo lda #$52 bne s0 ; ** increment temp pointer ** inctmp inc tmp0 bne setwr inc tmp0+1 bne setwr inc wrap setwr rts ; ** read character ** rdoc jsr rdt cmp #$0d bne setwr pla pla ; ** prompt for command ** strt lda #0 sta wrap ldx #$0d lda #$2e jsr wrtwo ; ** check input command ** st1 jsr rdoc cmp #$2e beq st1 cmp #$20 beq st1 s0 ldx #$0e s1 cmp keyw,x bne s2 txa asl a tax lda kaddr+1,x pha lda kaddr,x pha rts s2 dex bpl s1 jmp error ; ** set pc addrress ** putp lda tmp0 sta pcl lda tmp0+1 sta pch rts ; ** memory display ** dm lda #$08 dm0 sta tmpc ldy #0 dm1 jsr space lda (tmp0),y jsr wrob jsr inctmp dec tmpc bne dm1 rts ; ** change memory ** byte jsr rdob bcc by3 ldx #0 sta (tmp0,x) cmp (tmp0,x) beq by3 jmp error by3 jsr inctmp dec tmpc rts ; ** set pc reg addrs ** setr lda #pch+2 sta tmp0+1 lda #5 rts ; ** write display prompt ** altrit tya pha jsr crlf pla ldx #$2e jmp wrtwo ; **display registers ** dsplyr ldx #0 d2 lda regk,x jsr wrt inx cpx #$16 bne d2 ldy #$3b jsr altrit lda pch jsr wrob lda pcl jsr wrob jsr setr jsr dm0 beq a9 ; ** display memory ** dsplym jsr rdoc jsr rdoa bcc errs1 lda tmp0 sta tmp2 lda tmp0+1 sta tmp2+1 jsr rdt cmp #$0d beq dsp1 jsr rdoa bcc errs1 jsr t2t2 dsp1 jsr stop1 beq a9 ldx wrap bne a9 jsr diffp bcc a9 ldy #$3a jsr altrit jsr wroa jsr dm beq dsp1 errs1 jmp error ; ** alter memory ** altr jsr rdoa bcc al2 jsr putp al2 jsr setr bne a0 altm jsr rdoa bcc errs1 a4 lda #$08 a0 sta tmpc a5 jsr rdoc jsr byte bne a5 a9 jmp strt ; ** .go ** go jsr rdt cmp #$0d beq g1 cmp #$20 bne errs1 jsr rdoa bcc g1 jsr putp g1 ldx sp txs sei lda pch pha lda pcl pha lda flgs pha lda acc ldx xr ldy yr rti ; ** back to basic ** exit ldx sp txs jmp (ready) ; ** load/save ** ld ldy #1 sty fa sty wtype dey sty fnlen sty satus sty lvflag lda #addrs sta fnadr+1 l1 jsr rdt cmp #$20 beq l1 cmp #$0d beq l5 cmp #$22 l2 bne errl l3 jsr rdt cmp #$22 beq l8 cmp #$0d beq l5 sta (fnadr),y inc fnlen iny cpy #$10 l4 bne l3 errl jmp error l8 jsr rdt cmp #$0d beq l5 cmp #$2c bne l2 jsr rdob and #$0f beq l4 cmp #$03 beq l4 sta fa jsr rdt cmp #$0d l5 rts ld15 jmp (ldvec) sv15 jmp (svvec) load jsr ld bne errl lda #$00 jsr ld15 lda satus and #$10 bne errl jmp strt save jsr ld cmp #$2c bne errl jsr rdoa jsr t2t2 jsr rdt cmp #$2c bne errl jsr rdoa lda tmp0 sta eal lda tmp0+1 sta eah jsr t2t2 jsr rdt cmp #$0d bne errl jsr sv15 jmp strt ; ** print hex byte ** wroa lda tmp0+1 jsr wrob lda tmp0 wrob pha lsr a lsr a lsr a lsr a jsr ascii tax pla and #$0f jsr ascii ; ** print two chars ** wrtwo pha txa jsr wrt pla jmp wrt ; ** convert to ascii ** ascii ora #$30 cmp #$3a bcc asc1 adc #$06 asc1 rts ; ** swap tmp0, tmp2 ** t2t2 ldx #$02 t2t21 lda tmp0-1,x pha lda tmp2-1,x sta tmp0-1,x pla sta tmp2-1,x dex bne t2t21 rts ; ** read hex address ** rdoa jsr rdob rdoa1 bcc rdoa2 sta tmp0+1 rdoa2 jsr rdob bcc rdexit sta tmp0 rdexit rts rdob lda #0 ; ** scan for hex byte ** sta acmd jsr rdoc rdob1 cmp #$20 bne rdob2 jsr rdoc cmp #$20 bne rdob3 clc rts ; ** read hex byte ** rdob2 jsr hexit asl a asl a asl a asl a sta acmd jsr rdoc rdob3 jsr hexit ora acmd sec rts ; ** convert from hex ** hexit cmp #$3a bcc hex08 adc #$08 hex08 and #$0f rts ; ** decrement t0,t2 ** spread = tmp2-tmp0 dect2 ldx #