From dd8757d460689601964c04835756e1a927d8c7ef Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sat, 18 Mar 2017 11:13:41 -0400 Subject: [PATCH] initial version. --- Makefile | 26 +++++++ ModemKEGS.aii | 126 +++++++++++++++++++++++++++++++ ModemWorks/ConsoleTool.equ | 23 ++++++ ModemWorks/ModemTool.equ | 26 +++++++ ModemWorks/OMM.equ | 56 ++++++++++++++ ModemWorks/PortTool.equ | 37 +++++++++ ModemWorks/PrinterTool.equ | 13 ++++ ModemWorks/ReceiveTool.equ | 8 ++ ModemWorks/SendTool.equ | 8 ++ ModemWorks/TimeTool.equ | 17 +++++ SerialKEGS.aii | 151 +++++++++++++++++++++++++++++++++++++ 11 files changed, 491 insertions(+) create mode 100644 Makefile create mode 100644 ModemKEGS.aii create mode 100644 ModemWorks/ConsoleTool.equ create mode 100644 ModemWorks/ModemTool.equ create mode 100644 ModemWorks/OMM.equ create mode 100644 ModemWorks/PortTool.equ create mode 100644 ModemWorks/PrinterTool.equ create mode 100644 ModemWorks/ReceiveTool.equ create mode 100644 ModemWorks/SendTool.equ create mode 100644 ModemWorks/TimeTool.equ create mode 100644 SerialKEGS.aii diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..126585d --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +# disable built-in rules. +.SUFFIXES: +# do not auto-delete intermediate objects. +.SECONDARY: + +MAKEBIN = mpw MakeBinIIgs +ASM = mpw AsmIIgs +LINK = mpw LinkIIgs + +TARGETS = ModemKEGS SerialKEGS + +all: $(TARGETS) + +.PHONY: clean +clean: + $(RM) -- $(TARGETS) *.omf *.o *.lst + +% : %.omf + $(MAKEBIN) -org \$$0ff0 -t \$$2b -at \$$8006 -p -s -o $@ $^ + + +%.omf : %.o + $(LINK) -p -l -x -o $@ $^ + +%.o : %.aii + $(ASM) -p -l -i ModemWorks/ -o $@ $^ diff --git a/ModemKEGS.aii b/ModemKEGS.aii new file mode 100644 index 0000000..0e98384 --- /dev/null +++ b/ModemKEGS.aii @@ -0,0 +1,126 @@ + + machine m65816 + case on + string asis + + longa off + longi off + + include 'OMM.equ' + + macro +&l cstr &x +&l dc.b &x, 0 + endm + +a1 equ $3c +prmtbl equ $e0 + +FRMNUM equ $dd67 +GETADR equ $e752 + +WDM_ID equ $fe + +proc proc +hVERS dc.w $0000 +hID dc.w 'mt' +hSIZE dc.w end-start +hORG dc.w start +hAMPC dc.w amperc +hKIND dc.w $0000 +hRSRV1 dc.w $0000 +hRSRV2 dc.w $0000 + + +start + + cmp #MSG_AMPR ;ampersand call? + beq do_ampr ;yes + cmp #MSG_INFO ;get info string? + beq do_info + cmp #MSG_USER + beq native_dispatch + rts + +do_ampr + ; & mset address. + ; this is a nop. + ; however we still need to grab out argument. + jsr FRMNUM + jsr GETADR + sty prmtbl + sta prmtbl+1 + rts + +do_info + lda a_info + sta a1 + lda a_info+1 + sta a1+1 + rts + +;do_user +; cpy #18+1 +; bcc native_dispatch +; rts + + ; 16-bite code. NOT relocated. position independent code ONLY. +native_dispatch + ; a = omm id + ; y = request (if msg_user) + + clc + xce + rep #$30 + longa on + longi on + + ldx my_id + and ff + ; + ; wdm inputs: + ; a = OMM call number + ; x = tool id + ; y = user call number + ; + ; wdm $85 + dc.b $42, WDM_ID + + php + sec + xce + longa off + longi off + plp + rts + + + + dc.b 0 +* +* immediate table +* +a_info dc.w info + dc.w 0 + + +* +* data +* + +my_id dc.w 'mt' +ff dc.w $00ff + + ; dc.b '&SYSDATE' will not expand &SYSDATE. + msb on +info cstr '&SYSDATE Modem (KEGS) 1.0' + msb off + +amperc + cstr 'MSET' + dc.b -1 + +end + + endp + end diff --git a/ModemWorks/ConsoleTool.equ b/ModemWorks/ConsoleTool.equ new file mode 100644 index 0000000..a2fe3cf --- /dev/null +++ b/ModemWorks/ConsoleTool.equ @@ -0,0 +1,23 @@ +************************************************** +*** +*** ConsoleTool.equ +*** + +CT_ID equ $7463 ;Console Tool ("ct") ID + +CTOpen equ 0 +CTClose equ 1 +CTReset equ 2 +CTControl equ 3 +CTStatus equ 4 +CTGetXY equ 5 +CTWriteChar equ 6 +CTWriteBuffer equ 7 +CTTestChar equ 8 +CTReadChar equ 9 +CTFlushInQ equ 10 +CTShowCursor equ 11 +CTHideCursor equ 12 +CTSetBellAttr equ 13 +CTSetTermcap equ 14 +CTGotoXY equ 15 diff --git a/ModemWorks/ModemTool.equ b/ModemWorks/ModemTool.equ new file mode 100644 index 0000000..fb24e2a --- /dev/null +++ b/ModemWorks/ModemTool.equ @@ -0,0 +1,26 @@ +************************************************************ +*** +*** ModemTool.equ +*** + +MT_ID equ $746d ;Modem Tool ('mt') ID + +InitModem equ 0 +ModemExit equ 1 +IsOnline equ 2 +HasMNP equ 3 +DialNumber equ 4 +SetBusy equ 5 +HandleConnect equ 6 +AnswerLine equ 7 +HangUp equ 8 +IsRinging equ 9 +SetMNP equ 10 +OrigAnsLine equ 11 +ResetModem equ 12 +SetSpeaker equ 13 +GetMode equ 14 +ModemType equ 15 +ConnectSpeed equ 16 +SetModem equ 17 +SetModemSpeed equ 18 diff --git a/ModemWorks/OMM.equ b/ModemWorks/OMM.equ new file mode 100644 index 0000000..2c93f5f --- /dev/null +++ b/ModemWorks/OMM.equ @@ -0,0 +1,56 @@ +********************************************************************** +*** +*** omm.asm Object Module Manager interface constants +*** Copyright (C) 1990 Morgan Davis Group +*** + +*------------------------------* +* Loader Constants * +*------------------------------* + +OMMVEC equ $3f8 ;user vector + +OMM_ID equ 0 ;index of object module mgr module +OMM_HEADER equ 16 ;size of OMM header + +*------------------------------* +* Messages Types * +*------------------------------* + +MSG_INIT equ 0 ;initialize module +MSG_QUIT equ 1 ;quit (shutdown) module +MSG_AMPR equ 2 ;execute ampersand service routine +MSG_USER equ 3 ;user (non-applesoft) service request +MSG_REL1 equ 4 ;alert module before relocation +MSG_REL2 equ 5 ;alert module after relocation +MSG_KILL equ 6 ;death notice (sent before actual death) +MSG_DIED equ 7 ;obituary (sent after death) +MSG_BORN equ 8 ;birth notice +MSG_IDLE equ 9 ;idle event for module +MSG_INFO equ 10 ;get modules info string +MSG_NEXT equ 11 + +*------------------------------* +* OMM control errors * +*------------------------------* + +LER_NOERR equ 0 ;no error +LER_CNIMP equ 1 ;control class not implemented +LER_FNIMP equ 2 ;user control function not implemented +LER_SIGNF equ 3 ;signature not found + +*------------------------------* +* OMM User Function Codes * +*------------------------------* + +OMM_GETID equ 0 ;get module index by signature (into X) +OMM_XOAMP equ 1 ;execute original ampersand handler +OMM_FREE equ 2 ;free a module whose index is at A1 +OMM_PUTWORD equ 3 ;put word at A1 into numeric var +OMM_PUTSTR equ 4 ;put string into string var (lowtr = descrip) +OMM_GETSTR equ 5 ;get string var's descriptor into lowtr +OMM_PADDEC equ 6 ;print decimal word (lowtr: width, low, high) +OMM_C2PSTR equ 7 ;copy C to P-string (lowtr = desc, a1 = targ) +OMM_COUNT equ 8 ;get count of modules +OMM_GETINFO equ 9 ;get module's info string +OMM_NEXT equ 10 diff --git a/ModemWorks/PortTool.equ b/ModemWorks/PortTool.equ new file mode 100644 index 0000000..6cfddc3 --- /dev/null +++ b/ModemWorks/PortTool.equ @@ -0,0 +1,37 @@ +************************************************** +*** +*** PortTool.equ +*** + +PT_ID equ $7470 ;Port Tool ("pt") ID + +SerOpen equ 0 +SerClose equ 1 +SerReset equ 2 +SerSendBreak equ 3 +SerSetDTR equ 4 +SerClearDTR equ 5 +SerSetPortBits equ 6 +SerSetSpeed equ 7 +SerGetSpeed equ 8 +SerGetDCD equ 9 +SerWriteChar equ 10 +SerWriteBuffer equ 11 +SerReadChar equ 12 +SerReadBuffer equ 13 +SerFlushInQ equ 14 +SerGetInQ equ 15 +SerGetInBuf equ 16 +SerSetInBuf equ 17 +SerSetFlow equ 18 +SerAddCompVec equ 19 +SerDelCompVec equ 20 +SerClearCompVec equ 21 +SerAddSearch equ 22 +SerDelSearch equ 23 +SerClearSearch equ 26 +SerGetSearch equ 24 +SerShowSearch equ 25 +SerGetTimedByte equ 27 +SerOutBuffering equ 28 +SerSetDCD equ 29 diff --git a/ModemWorks/PrinterTool.equ b/ModemWorks/PrinterTool.equ new file mode 100644 index 0000000..5176817 --- /dev/null +++ b/ModemWorks/PrinterTool.equ @@ -0,0 +1,13 @@ +************************************************** +*** +*** PrinterTool.equ +*** + +LT_ID equ $746C ;Printer Tool ("lt") ID + +LTOpen equ 0 +LTClose equ 1 +LTReset equ 2 +LTControl equ 3 +LTWriteChar equ 5 +LTWriteBuffer equ 6 diff --git a/ModemWorks/ReceiveTool.equ b/ModemWorks/ReceiveTool.equ new file mode 100644 index 0000000..3b3ecef --- /dev/null +++ b/ModemWorks/ReceiveTool.equ @@ -0,0 +1,8 @@ +************************************************** +*** +*** ReceiveTool.equ +*** + +RT_ID equ $7472 ;Receive Tool ("rt") ID + +RTTransfer equ 0 diff --git a/ModemWorks/SendTool.equ b/ModemWorks/SendTool.equ new file mode 100644 index 0000000..e4ad92e --- /dev/null +++ b/ModemWorks/SendTool.equ @@ -0,0 +1,8 @@ +************************************************** +*** +*** SendTool.equ +*** + +ST_ID equ $7473 ;Send Tool ("st") ID + +STTransfer equ 0 diff --git a/ModemWorks/TimeTool.equ b/ModemWorks/TimeTool.equ new file mode 100644 index 0000000..c76a1d4 --- /dev/null +++ b/ModemWorks/TimeTool.equ @@ -0,0 +1,17 @@ + +************************************************** +*** +*** TimeTool.equ +*** + +TT_ID equ $7474 ;Time Tool ("tt") ID + +Ticker equ 0 +GetTicks equ 1 +CountDown equ 2 +WaitTicks equ 3 +WaitSeconds equ 4 +SetCounter equ 5 +GetTimeStr equ 6 +FastCPU equ 7 +SlowCPU equ 8 diff --git a/SerialKEGS.aii b/SerialKEGS.aii new file mode 100644 index 0000000..d3fd089 --- /dev/null +++ b/SerialKEGS.aii @@ -0,0 +1,151 @@ + + machine m65816 + case on + string asis + + longa off + longi off + + include 'OMM.equ' + include 'PortTool.equ' + include 'ConsoleTool.equ' + + macro +&l cstr &x +&l dc.b &x, 0 + endm + +a1 equ $3c +prmtbl equ $e0 + +WDM_ID equ $fe + +proc proc +hVERS dc.w $0000 +hID dc.w 'pt' +hSIZE dc.w end-start +hORG dc.w start +hAMPC dc.w 0 +hKIND dc.w $0000 +hRSRV1 dc.w $0000 +hRSRV2 dc.w $0000 + + +start + + cmp #MSG_INFO + beq do_info + cmp #MSG_USER + beq do_user + cmp #MSG_INIT + beq native_dispatch + cmp #MSG_QUIT + beq native_dispatch + cmp #MSG_BORN + beq lifetime + cmp #MSG_DIED + beq lifetime + rts + +lifetime + lda #CT_ID + sta