*2600 /CALL TO PUSH ROUTINE: / /PUSH /A /ADDRESS OF LIST DESCRIBING STACK /B /ADDRESS OF DATA TO PUSH / / / /A, /ADDRESS OF STACK ADDRESS /LIST DESCRIBING / /ADDRESS OF MAX STACK SIZE /STACK / /ADDRESS OF STACK POINTER PUSH, 3 BLOUT ACUM 41 /GET MAX STACK SIZE CIA ACUM 61 /GET POINTER SMA CLA JMP ERRRET /STACK FULL ACUM 61 /GET POINTER ACUM 21 /ADD ON STARTING ADD. OF STACK DCA TEMADD ACUM 2 /GET DATA TO PUSH DCA I TEMADD ACUM 61 /INCREMENT POINTER IAC PUT 61 INEND POP, 3 BLOUT CLA CMA ACUM 61 /DECREMENT POINTER SPA JMP ERRRET /STACK EMPTY PUT 61 ACUM 61 /GET POINTER ACUM 21 /ADD ON STARTING ADD. OF STACK DCA TEMADD TAD I TEMADD PUT 2 INEND TEMADD, 0 ERRRET, INBLIP BLJUMP 3 ASTACK, TABLE1 SIZE POINT1 BSTACK, TABLE2 SIZE POINT2 CSTACK, TABLE3 SIZE POINT3 MAXSIZ=40 /SIZE OF TOWER STACKS SIZE, MAXSIZ TABLE1, TABLE TABLE2, TABLE+MAXSIZ TABLE3, TABLE+MAXSIZ+MAXSIZ POINT1, 0 POINT2, 0 POINT3, 0 TABLE, ZBLOCK MAXSIZ+MAXSIZ+MAXSIZ /******************************************************** OCNUM=432 /TOWERS OF HANOI PROBLEM START, CLA DCA POINT1 DCA POINT2 DCA POINT3 DCA TEMD INPUT, TAD TEMD CHECK 215 JMP GO RTCOMD ROCT DCA TEMD NTBLIP INBLIP BLNTOF PUSH ASTACK OCNUM ERROR BLOUT JMP INPUT GO, LINE TAD POINT1 DCA K INBLIP MOVE ASTACK CSTACK BSTACK K BLOUT MOSTGO K, 0 /********************************************************** *2000 ONE, 1 TEMA, 0 TEMB, 0 TEMC, 0 MOVE, 4 BLOUT CLA CMA ACUM 4 SPA BLEND /NONE TO MOVE SNA JMP ONLY1 /ONLY ONE TO MOVE DCA TEMA INBLIP MOVE /MOVE ALL BUT 1 TO SPARE STACK 1 3 2 TEMA MOVE /MOVE LAST ONE TO SPARE STACK 1 2 3 ONE MOVE /MOVE REST TO "TO" STACK 3 2 1 TEMA RETISZ, BLOUT ISZ TEMA NOP INEND /......................... ONLY1, INBLIP POP /IS "FROM" STACK EMPTY? 1 TEMB ERROR /YES - NO MORE DISCS TO MOVE - ERROR PUSH /REPLACE DISC AFTER EXAMINING IT 1 TEMB ERROR POP /IS "TO" STACK EMPTY? 2 TEMC DOMOVE /YES - A MOVE CAN BE MADE PUSH /REPLACE DISC AFTER EXAMINING IT 2 TEMC ERROR BLOUT TAD TEMB /TOP OF "FROM" STACK CIA TAD TEMC /TOP OF "TO" STACK SNA TYDER /ERROR - BOTH DISCS THE SAME SIZE SMA JMP DOMOVE-1 INBLIP MOVE /MOVE 1 FROM "TO" TO SPARE 2 3 1 ONE MOVE /REPEAT CALL 1 2 3 4 MOVE /MOVE THE ONE BACK 3 2 1 ONE BLEND /..................... INBLIP DOMOVE, POP 1 TEMB ERROR PUSH 2 TEMB ERROR BLOUT JMS I PRINTI INEND PRINTI, PRINT ERROR, BLOUT TYDER *2200 PRINT, 0 TDC 4315 4317 4326 4305 240 TAD I TEMBI TOCT TDC 4240 4306 4322 4317 4315 240 GETAD 1 JMS TYPE TDC 4240 4324 4317 240 GETAD 2 JMS TYPE LINE JMP I PRINT TYPE, 0 CHECK ASTACK JMP TDCA CHECK BSTACK JMP TDCB CHECK CSTACK JMP TDCC TYDER TDCA, TDC 301 JMP I TYPE TDCB, TDC 302 JMP I TYPE TDCC, TDC 303 JMP I TYPE TEMD, 0 TEMBI, TEMB $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$