DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC3600/RC7000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC3600/RC7000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦103a45ae6⟧ COMAL_SAVE

    Length: 2412 (0x96c)
    Types: COMAL_SAVE

Derivation

└─⟦466f46364⟧ Bits:30001785 SG0005 Floppy
    └─ ⟦78916cf5f⟧ »/REP50« 
        └─⟦this⟧ 

UPAS Segment

SAVE filename: "REP50"

 0010 REM  830201PHK RE BINARY FILE DISASSSEMBLER«nul»
 0020 LET WORDA = 1
 0030 PROC WORD
 0040   IF WORDA THEN
 0050     READ FILE ( 1 ) WORDB
 0060     CALL "FIX" , WORDB , WORDC , WORDD
 0070     LET A = WORDC DIV 256 + 256 * ( WORDC MOD 256 ) ; WORDA = 0
 0080   ELSE 
 0090     LET A = WORDD DIV 256 + 256 * ( WORDD MOD 256 ) ; WORDA = 1
 0100   ENDIF 
 0110 ENDPROC
 0120 DIM HEX4$ ( 16 )
 0130 LET HEX4$ = "0123456789ABCDEF"
 0140 PROC HEX4
 0150   PRINT HEX4$ ( A DIV 4096 + 1 ) ; HEX4$ ( A DIV 256 MOD 16 + 1 ) ; HEX4$ ( A DIV 16 MOD 16 + 1 ) ; HEX4$ ( A MOD 16 + 1 ) ;
 0160 ENDPROC
 0170 PROC HEX2
 0180   PRINT HEX4$ ( A DIV 16 MOD 16 + 1 ) ; HEX4$ ( A MOD 16 + 1 ) ;
 0190 ENDPROC
 0200 DIM FIL$ ( 5 )
 0210 DIM RELOC ( 3 )
 0220 DIM RELOC$ ( 8 )
 0230 LET RELOC$ = " '<34>-=$*~"
 0240 DIM ADR$ ( 1 )
 0250 DIM DAT$ ( 1 )
 0260 LET A = 0
 0270 READ B , FIL$
 0280 IF B = - 1 THEN GOTO 0310
 0290 LET A = A + 1
 0300 GOTO 0270
 0310 LET SYMMAX = A
 0320 DIM SYMB ( SYMMAX ) , SYMB$ ( SYMMAX , 5 )
 0330 RESTORE 0000
 0340 FOR A = 1 TO SYMMAX
 0350   READ SYMB ( A ) , SYMB$ ( A )
 0360 NEXT 
 0370 INPUT "<12><6>`<10>INPUT FILENAME OF COPS TO DISASSEMBLE:" , FIL$
 0380 CLOSE
 0390 OPEN FILE ( 1 , 1 ) FIL$
 0400 LET ENDF = 0
 0410 REPEAT 
 0420   EXEC WORD
 0430   LET BLKTP = A
 0440   EXEC WORD
 0450   LET LENGTH = A
 0460   CASE BLKTP OF
 0470     PRINT "UNPROCESSED BLOCK. TYPE:" ;
 0480     LET A = BLKTP
 0490     EXEC HEX4
 0500     PRINT
 0510     FOR B = LENGTH TO 65539
 0520       EXEC WORD
 0530     NEXT 
 0540   WHEN 0
 0550     LET ENDF = 1
 0560   WHEN 2
 0570     FOR B = 1 TO 3
 0580       EXEC WORD
 0590       LET RELOC ( B ) = A
 0600     NEXT 
 0610     EXEC WORD
 0620     EXEC WORD
 0630     LET ADR = A
 0640     LET ADR$ = RELOC$ ( RELOC ( 1 ) DIV 8192 )
 0650     FOR B = LENGTH TO 65534
 0660       LET A = ADR ; C = B - LENGTH + 1
 0670       EXEC HEX4
 0680       PRINT ADR$ ; " " ;
 0690       EXEC WORD
 0700       EXEC HEX4
 0710       LET DAT$ = RELOC$ ( RELOC ( C DIV 5 + 1 ) / 2 DIV 8 ^ ( 4 - C MOD 5 ) MOD 8 )
 0720       PRINT DAT$ ; " " ;
 0730       CASE DAT$ OF
 0740         REM «nul»
 0750       WHEN " "
 0760         LET C = A DIV 256 ; C = 32 + ( ( C - 32 ) * ( C > 32 AND C < 127 ) ) ; D = A MOD 256 ; D = 32 + ( D - 32 ) * ( D > 32 AND D < 127 )
 0770         PRINT CHR ( C ) ; CHR ( D ) ; "   " ;
 0780         FOR C = 1 TO SYMMAX
 0790           IF A = SYMB ( C ) THEN
 0800             PRINT SYMB$ ( C ) ;
 0810             LET C = SYMMAX ; D = 0
 0820           ENDIF 
 0830         NEXT 
 0840         IF NOT D THEN GOTO 0960
 0850         PRINT "INSTR" ;
 0860       WHEN "'"
 0870         PRINT "     " ;
 0880         EXEC HEX4
 0890         PRINT "'" ;
 0900       WHEN "<34>"
 0910         PRINT "     " ;
 0920         LET A = A / 2
 0930         EXEC HEX4
 0940         PRINT "'*2" ;
 0950       ENDCASE «nul» 
 0960       LET ADR = ADR + 1
 0970       PRINT
 0980     NEXT 
 0990   WHEN 6
 1000     FOR B = 1 TO 5
 1010       EXEC WORD
 1020     NEXT 
 1030     PRINT "ENTRYPOINT:" ;
 1040     EXEC HEX4
 1050     PRINT
 1060   ENDCASE «nul» 
 1070 UNTIL ENDF
 1080 DATA 0 "0"
 1090 DATA 3232 "EXECU"
 1100 DATA - 1 "   "

UDAS Segment

    FNA definition = 0xffff
    FNB definition = 0xffff
    FNC definition = 0xffff
    FND definition = 0xffff
    FNE definition = 0xffff
    FNF definition = 0xffff
    FNG definition = 0xffff
    FNH definition = 0xffff
    FNI definition = 0xffff
    FNJ definition = 0xffff
    FNK definition = 0xffff
    FNL definition = 0xffff
    FNM definition = 0xffff
    FNN definition = 0xffff
    FNO definition = 0xffff
    FNP definition = 0xffff
    FNQ definition = 0xffff
    FNR definition = 0xffff
    FNS definition = 0xffff
    FNT definition = 0xffff
    FNU definition = 0xffff
    FNV definition = 0xffff
    FNW definition = 0xffff
    FNX definition = 0xffff
    FNY definition = 0xffff
    FNZ definition = 0xffff
    FN[ definition = 0xffff
    FN\ definition = 0xffff
    FN] definition = 0xffff
    GOSUB-RETURN stack pointer = 0x0001
      stack[0] = 0x0244
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
    FOR-NEXT stack pointer = 0x0001
      Var# = 0x01a7
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 3.08853e-84   (0x00000006)
      Var# = 0x0082
      Loop Top = 0x0222
      To Val = 65534   (0x44fffe00)
      Step Val = 1   (0x41100000)
      Var# = 0x0084
      Loop Top = 0x02b2
      To Val = 2   (0x41200000)
      Step Val = 1   (0x41100000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
    REPEAT-UNTIL stack pointer = 0x0000
      stack[0] = 0x0000
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
    WHILE-ENDWHILE stack pointer = 0x0000
      stack[0] = 0x0000
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
    IF-ELSE stack pointer = 0x0000
      stack[0] = 0x0000
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
Variables:
    0x80 0xffff 0x00 
    0x81 0xffff 0x00 WORD
    0x82 0x0030 0x00 B
    0x83 0x002e 0x00 A
    0x84 0x005a 0x00 C
    0x85 0x005c 0x00 D
    0x86 0x0000 0x00 WORDA
    0x87 0x004e 0x00 WORDB
    0x88 0x0050 0x00 WORDC
    0x89 0x0052 0x00 WORDD
    0x8a 0xffff 0x00 HEX4
    0x8b 0x0002 0x02 HEX4$
    0x8c 0xffff 0x00 HEX2
    0x8d 0x000d 0x02 FIL$
    0x8e 0x004c 0x00 ENDF
    0x8f 0x0054 0x00 BLKTP
    0x90 0x0056 0x00 LENGTH
    0x91 0x0013 0x01 RELOC
    0x92 0x001f 0x02 RELOC$
    0x93 0x0026 0x02 ADR$
    0x94 0x0058 0x00 ADR
    0x95 0x002a 0x02 DAT$
    0x96 0x0032 0x00 SYMMAX
    0x97 0x0034 0x01 SYMB
    0x98 0x003d 0x03 SYMB$

Wrapper

.magic = 0x4e32
.u_pas = 0x0364  // Length of UPAS in words
.u_das = 0x0143  // Length of UDAS in words
.u_dvs = 0x00e5  // Start på savede variabel indhold (word adr)
.u_nds = 0x00eb  // Address på næste prog.sætning (word adr)
.u_cps = 0x00be  // Address på curr prog.sætning (word adr)
.u_tll = 0x0000  // Page størrelse
.u_tts = 0x000e  // TAP størrelse
.u_ran = 0x0001  // Random tal
.u_cdl = 0x0006  // Current DATA sætning ptr
.u_cdb = 0x0000  // Current DATA byte ptr
.u_esa = 0x035b  // ON ESE (word adr)
.u_era = 0x06b4  // ON ERR (word adr)
.u_cas = 0xffff  // CASE dybde
.u_las = 0xffff  // last (-1)