Metropoli BBS
VIEWER: toasc.lst MODE: TEXT (ASCII)
                                    \->ASC

80000: 02D9D ! Program
80005: 1592D ; Set last RPL token to <0h> and verify DEPTH >= 1
8000A: 03188 ; Internal DUP
8000F: 05944 ; Internal BYTES (non-ROM objects) -> (2:System Binary,1:Binary Integer)
80014: 03223 ; Internal SWAP
80019: 055DF ; ""
8001E: 032C2 ; Internal OVER
80023: 6257A ; Internal add 4 (1:System Binary)
80028: 03188 ; Internal DUP
8002D: 64BDA ; <40h>
80032: 03EF7 ; Internal / (2:System Binary,1:System Binary) -> (2:rem,1:div)
80037: 03223 ; Internal SWAP
8003C: 03CA6 ; if TOS = 0 (System Binary) -> True/False
80041: 619BC ; if pop TOS != True, then skip next token
80046: 03E0E ; Internal subtract one (1:System Binary)
8004B: 03DBC ; Internal + (2:System Binary,1:System Binary)
80050: 03E6F ; Internal multiply by 2 (1:System Binary)
80055: 61C1C ; allocate nibbles (2:sized object,1:System Binary)
8005A: 03223 ; Internal SWAP
	; *** (4:orig object,3:checksum,2:alloc str,1:size) ***
8005F: 02DCC ! Code
80064: 000CD ! 205 nibbles (next RPL at 80131)
80069: 8F14660    GOSBVL 06641          ; MC: pop TOS (System Binary) -> A.A
80070: CC         A=A-1  A              ; A.A = size-1
80072: 8FB9760    GOSBVL 0679B          ; MC: save D0,D1,B,D (uses C,D0), clear carry
80079: 840        ST=0   0              ; start object phase
8007C: 3104       LCHEX  40             ! "@"
80080: AE7        D=C    B              ; D (characters per line) = 64
80083: D8         B=A    A              ; B.A = size-1
80085: 143        A=DAT1 A              ; A.A = adr of alloc str
80088: 130        D0=A                  ; D0 = adr of alloc str
8008B: 169        D0=D0+ 10             ; D0 = adr of alloc str data
8008E: 174        D1=D1+ 5              ; point to checksum on stack
80091: 147        C=DAT1 A              ; C.A = adr of checksum
80094: 06         RSTK=C                ; save adr of checksum
80096: 174        D1=D1+ 5              ; point to orig object
80099: 143        A=DAT1 A              ; A.A = adr of orig object
8009C: 131        D1=A                  ; D1 = adr of orig object
	; *** Verify RAM object ***
8009F: 1534       A=DAT1 S              ; A.S = first nibble of object
800A3: AC6        C=A    S              ; C.S = first nibble of object
800A6: B44        A=A+1  S              ; modify A.A's copy of data
800A9: 1514       DAT1=A S              ; and try to update memory
800AD: 1534       A=DAT1 S              ; fetch nibble back
800B1: 94690      ?A#C   S              ; go if RAM (changed)
		  GOYES  800BD
800B6: 8D9B026    GOVLNG 620B9          ; MC: restore regs and push True
800BD: 1554       DAT1=C S              ; fix RAM (replace orig nibble)
800C1: A6F        D=D-1  B              ; count character in line
800C4: 531        GONC   800D8          ; go if not EOL
800C7: 31F3       LCHEX  3F             ! "?"  ; reset D for new line (D=63)
800CB: AE7        D=C    B              ; ...
800CE: 31A0       LCHEX  0A             ! "."
800D2: 14C        DAT0=C B              ; append line feed
800D5: 161        D0=D0+ 2              ; ...
800D8: AE2        C=0    B              ; convert nibble to character
800DB: 15F0       C=DAT1 1            
800DF: 8082103    LAHEX  30             ! "0"
800E6: A62        C=C+A  B            
800E9: 8082193    LAHEX  39             ! "9"
800F0: 9EEC0      ?A>=C  B            
		  GOYES  800FF
800F5: 8082170    LAHEX  07             ! "."
800FC: A62        C=C+A  B            
800FF: 14C        DAT0=C B              ; store character into string
80102: 161        D0=D0+ 2              ; next character
80105: 170        D1=D1+ 1              ; next nibble
80108: CD         B=B-1  A              ; decr nibbles remaining
8010A: 56B        GONC   800C1          ; go if more
8010D: 870A1      ?ST=1  0              ; exit if checksum in progress
		  GOYES  8012A
80112: 850        ST=1   0              ; start checksum phase
80115: 3430000    LCHEX  00003          ; B.A = 3 (size of checksum - 1)
8011C: D5         B=C    A              ; ...
8011E: 07         C=RSTK                ; C = adr of checksum
80120: 135        D1=C                  ; D1 = adr of checksum
80123: 179        D1=D1+ 10             ; D1 = adr of checksum data
80126: 6A9F       GOTO   800C1          ; go process checksum
8012A: 8D2D026    GOVLNG 620D2          ; MC: restore regs and push False
 . . . . . . ! End of Code
	; *** (4:orig object,3:checksum,2:new string,1:True/False) ***
80131: 61993 ; if pop TOS = True, then do next/return, else skip next
80136: 02D9D ! Program
8013B: 03258 ; Internal DROP2
80140: [...] ! "ROM Object"
8015E: 1A339 ; DOERR (XLIB 2 42)
80163: 0312B ! End Marker
80168: 6112A ; drop level two and three objects
8016D: 0312B ! End Marker
[ RETURN TO DIRECTORY ]