Command processing

The TIM user interface consists of a typical teletype originated one character command interface.

 DISPLAY COMMANDS
  ----------------

  .R          DISPLAY REGISTERS (PC,F,A,X,Y,SP)
  .M  ADDR    DISPLAY MEMORY ( 8 BYTES BEGINNING AT ADDR )


  ALTER COMMAND (:)
  -----------------
  .:  DATA      ALTERS PREVIOUSLY DISPLAYED ITEM OR NEXT ITEM


  PAPER TAPE I/O COMMANDS
  ------------------------

  .LH                   LOAD HEX TAPE
  .WB ADDR1 ADDR2       WRITE BNPF TAPE (FROM LOW ADDR1 TO HIGH ADDR2)
  .WH ADDR1 ADDR2       WRITE HEX TAPE (FROM LOW ADDR1 TO HIGH ADDR2)

  CONTROL COMMANDS
  ----------------

  .G                    GO, CONTINUE EXECUTION FROM CIRRENT PC ADDRESS

  .H                    TOGGLES HIGH-SPEED-READER OPTION
                          (IF ITS ON, TURNS IT OFF; IF OFF, TURNS ON

START

0096   0000             NCMDS  =7

0309   7106 3A          CMDS   .BYTE ':'
0310   7107 52                 .BYTE 'R'
0311   7108 4D                 .BYTE 'M'
0312   7109 47                 .BYTE 'G'
0313   710A 48                 .BYTE 'H'
0314   710B 4C                 .BYTE 'L'
0315   710C 57                 .BYTE 'W'         ; W MUST BE LAST CMD IN CHAIN
0316   710D 3A          ADRS   .BYTE ALTER-MP1
0317   710E 14                 .BYTE DSPLYR-MP1
0318   710F 1C                 .BYTE DSPLYM-MP1
0319   7110 5C                 .BYTE GO-MP1
0320   7111 6F                 .BYTE HSP-MP1
0321   7112 74                 .BYTE LH-MP1
0322   7113 C2                 .BYTE WO-MP1

0692   7374 20 77 73    SPAC2  JSR SPACE
0693   7377 48          SPACE  PHA               ; SAVE A,X,Y
0694   7378 8A                 TXA
0695   7379 48                 PHA
0696   737A 98                 TYA
0697   737B 48                 PHA
0698   737C A9 20              LDA #' '
0699   737E 20 C6 72           JSR WRT           ; TYPE SP
0700   7381 68                 PLA               ; RESTORE A,X,Y
0701   7382 A8                 TAY
0702   7383 68                 PLA
0703   7384 AA                 TAX
0704   7385 68                 PLA
0705   7386 60                 RTS

0229   7086             ;
0230   7086 A9 00       START  LDA #0            ;NEXT COMMAND FROM USER
0231   7088 85 E7              STA HSPTR         ;CLEAR H. S. PAPER TAPE FLAG
0232   708A 85 E4              STA WRAP          ;CLEAR ADDRESS WRAP-AROUND FLAG
0233   708C 20 8A 72           JSR CRLF
0234   708F A9 2E              LDA #'.'           ; TYPE PROMPTING '.'
0235   7091 20 C6 72           JSR WROC
0236   7094 20 E9 72           JSR RDOC          ; READ CMD, CHAR RETURNED In A
0237   7097             ;
0238   7097 A2 06       S0     LDX #NCMDS-1      ; LOCK-UP CMD
0239   7099 DD 06 71    S1     CMP CMDS,X
0240   709C D0 19              BNE S2
0241   709E             ;
0242   709E A5 FD              LDA SAVX          ; SAVE PRIVIOUS CMD
0243   70A0 85 E9              STA PREVC
0244   70A2 86 FD              STX SAVX          ; SAVE CURRENT CMD INDEX
0245   70A4 A9 71              LDA #MP1/256      ; JMP INDIRECT TO CMD CODE
0246   70A6 85 ED              STA ACMD+1        ;   ALL CMD CODE BEGINS ON MP1
0247   70A8 BD 0D 71           LDA ADRS,X
0248   70AB 85 EC              STA ACMD
0249   70AD E0 03              CPX #3            ; IF :, R OR M (0, 1, OR 2) SPACE 2
0250   70AF B0 03              BCS IJMP
0251   70B1 20 74 73           JSR SPAC2
0252   70B4             ;
0253   70B4 6C EC 00    IJMP   JMP (ACMD)
0254   70B7             ;
0255   70B7 CA          S2     DEX
0256   70B8 10 DF              BPL S1            ; LOOP FOR ALL CMDS
0257   70BA             ;
0258   70BA A9 3F       ERROPR LDA #'?'          ; OPERATOR ERR, TYPE '?', RESTART
0259   70BC 20 C6 72           JSR WROC
0260   70BF 90 C5              BCC START        

What is happening here?

START

  • clear High speed reader flag (230-231)
  • clear address wrap around flag (232)
  • show prompt ‘.’ (233-235)
  • read command character (236)
    • command index = 7 (238)
    • lookup command[index] in table CMDS (239)
    • if not found decrement index
    • if index > 0 continue else display ‘?’ error and jump back to to START (255-260)
  • save previous command (243)
  • lookup address of command address ADRS[index] (245-248)
  • Add high part of address MP1 7100(245-246)
  • if index = 3 then show 2 spaces : R M (249-251)
  • jump indirect to address of command code (253)

SPAC2 SPAC

  • print (2) space with A X Y saved and restored

CMDS
Table with the 7 command characters

ADRS
Table with address of code of the 7 commands, ordered the same as CMDS table

On the next pages the command code is presented:
: modify memory ALTER-MP1
R show registers DSPLYR-MP1 7114
M show memory DSPLYM-MP1 711C
G execute code GO-MP1
H Toggle High speed reader input HSP-MP1
LH Load papertape LH-MP1
WH WB write papertape WO-MP1