TITLE BEER - 99 Bottles of beer on the wall ; ; By Mark H. Zellers ; ; This program emits the song 99-bottles of beer on the wall ; It is a demonstration of PDP-10 assembly language ; ; This program can be run on the SIMH emulator using the TOPS-10 ; Operating system. ; ; For more information, see http://www.aracnet.com/~healyzh/pdp10emu.html ; Or consult Wikipedia for more information about the PDP-10 ; SEARCH UUOSYM ; Define some registers ; note that registers 0 and 1 are used for scratch N==2 ; Register containing number of bottles D==3 ; Digits to output E==4 ; Ending (either take one down or go to the stor e) B==5 ; "Bottles" or "Bottle" LC==6 ; Either D or "no " START:: MOVEI N,^D99 ; Initialize number of bottles MOVEI E, [ASCIZ /You take one down, pass it around, /] LOOP: ; Convert the current count to a string ; MOVE 0,N IDIVI 0,^D10 JUMPE 0,ONEDIG ROT 0,-7 ; Move high digit to first character ROT 1,^D-14 ; Move low digit to second character IOR 0,1 ; Merge the two characters together ADD 0,[BYTE (7)60,60,40,0,0] ; Convert to ASCII and append a blank JRST OUTPUT ONEDIG: MOVE 0,1 ROT 0, -7 ADD 0,[BYTE (7)60,40,0,0,0] OUTPUT: MOVE D,0 ; Move result into digit buffer ; Use the appropriate ending for bottles MOVEI B,[ASCIZ/bottles/] CAIN N,1 MOVEI B,[ASCIZ/bottle/] ; ; Now check for whether we want the digits or the word no MOVEI LC,D ; Assume we want the digits ; JUMPN N,PASSIT MOVE D,[ASCIZ/No /] MOVEI LC,[ASCIZ /no /] MOVEI E,[ASCIZ /You go to the store and buy some more,/] ; Now output the strings ; PASSIT: CAIN N,^D99 ; Skip repeat on first verse JRST SKIPRP OUTSTR 0(LC) OUTSTR 0(B) ; "Bottles" or "bottle" OUTSTR [ASCIZ / of beer on the wall. /] SKIPRP: OUTSTR D ; Number of bottles OUTSTR 0(B) ; "Bottles" or "Bottle" OUTSTR [ASCIZ/ of beer on the wall, /] OUTSTR 0(LC) ; Number of bottles or "no" OUTSTR 0(B) OUTSTR [ASCIZ/ of beer. /] OUTSTR 0(E) ; Take one down or go to store SOJGE N,LOOP ; Decrement N and loop if N>=0 OUTSTR [ASCIZ/ 99 bottles of beer on the wall./] EXIT END START