File HANOI.

Directory of image this file is from
This file as a plain text file


*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 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search