Split
Octal
Address Octal Code Label Op Operand Commentary
<*> 000 353 SASNT XCHG USRRET=PLAD to DRDE; UDRDE to DRHL;
<*> 001 343 XTHL UDRDE to TOS; FRRET to DRHL;
<*> 002 305 PUSH B UDRBC to TOS;
<*> 003 365 PUSH PSW UDRPSW&A to TOS;
<*> 004 353 XCHG USRRET=-PLAD to DRHL; FRRET to DRDE;
<*> 005 303 021 <*> JMP FRNTD Go load only one field addr
and length parameter;
<*> 010 353 DASNT XCHG USRRET=PLAD to DRDE; UDRDE to DRHL;
<*> 011 343 XTHL UDRDE to TOS; FRRET to DRHL;
<*> 012 305 PUSH B UDRBC to TOS;
<*> 013 365 PUSH PSW UDRPSW&A to TOS;
<*> 014 353 XCHG USRRET=PLAD to DRHL; FRRET to DRDE;
<*> 015 116 MOV C,M FIELD1 addr LOB to SRC;
<*> 016 043 INX H Incr USRRET=-PLAD (+1 DASNT);
<*> 017 106 MOV B,M FIELD1 addr HOB to SRB;
<*> 020 043 INX H Incr USRRET=PLAD (+2 DASNT);
<*> 021 325 FRNTD PUSH D FRRET to TOS;
<*> 022 136 MOV E,M FIELD/FIELD2 addr LOB to SRE;
<*> 023 043 INX H Incr USRRET=PLAD (+3 DASNT; +1 SASNT);
<*> 024 126 MOV D,M FIELD/FIELD2 addr HOB to SRD;
<*> 025 043 INX H Incr USRRET=PLAD (+4 DASNT;+2 SASNT);
<*> 026 176 MOV A,M Length/Size param to SRA;
<*> 027 043 INX H Incr USRRET=PLAD (+5 DASNT;+3 SASNT);
<*> 030 343 XTHL True USRRET to TOS; FRRET to DRHL;
<*> 031 345 PUSH H FRRET to TOS;
<*> 032 147 MOV H,A Length/Size param to SRH;
<*> 033 311 RET Return to calling function routine;
<*> 034 343 DASXR XTHL UDRHL to TOS; FRRET=FRCOMMAND
address to TOS;
<*> 035 042 051 <*> SHLD DASFC+1 Store FRCOMMAND address in CALL;
<*> 040 341 POP H TOS=UDRHL to DRHL clear return;
<*> 041 343 XTHL UDRHL to TOS; USRRET=PLAD to DRHL;
<*> 042 315 010 <*> CALL DASNT Call DASNT to load parameters;
<*> 045 032 DASXL LDAX D Indexed FIELD2 char to SRA;
<*> 046 157 MOV L,A Move into SRL;
<*> 047 012 LDAX B Indexed FIELD1 char to SRA;
<*> 050 315 000 000 DASFC CALL Q'000000' Call the execution commands;
<*> 053 002 STAX B Store result in indexed FIELD1;
<*> 054 003 INX B Incr FIELD1 address index;
<*> 055 023 INX D Incr FIELD2 address index;
<*> 056 045 DCR H Decrement length/size;
<*> 057 302 045 <*> JNZ DASXL Loop until count is zero;
<*> 062 341 FRXIT POP H True USRRET to DRHL;
<*> 063 301 POP B UDRPSW&A to DRBC;
<*> 064 170 MOV A,B USRA to SRA; PSW=FRPSW;
<*> 065 301 FRXT2 POP B TOS=UDRBC to DRBC;
<*> 066 321 POP D TOS=UDRDE to ORDE;
<*> 067 343 XTHL True USRRET to TOS; TOS=UDRHL to DRHL;
<*> 070 311 RET Return to user; regs+user regs;
<*> 071 315 034 <*> NCHR CALL DASXR CALL DASXR execution control rtn
passing address of following;
<*> 074 245 ANA L Logical AND SRL to SRA;
<*> 075 311 RET Return to DASXR;
<*> 076 315 034 <*> OCHR CALL DASXR See NCHR comment at address 071;
<*> 101 265 ORA L Logical OR SRL to SRA;
<*> 102 311 RET Return to DASXR;
<*> 103 315 034 <*> XCHR CALL DASXR See NCHR comment at address 071;
<*> 106 255 XRA L Logical XOR SRL to SRA;
<*> 107 311 RET Return to DASXR;
<*> 110 315 034 <*> MVCHR CALL DASXR See NCHR comment at address 071;
<*> 113 175 MOV A,L Move SRL to SRA;
<*> 114 311 RET Return to DASXR;
<*> 115 315 034 <*> SWCHR CALL DASXR See NCHR comment at address 071;
<*> 120 022 STAX D SRA to indexed FIELD2 char;
<*> 121 175 MOV A,L Move SRL to SRA;
<*> 122 311 RET Return to DASXR;
<*> 123 315 034 <*> CLCHR CALL DASXR See NCHR comment at address 071;
<*> 126 275 CMP L Compare SRL to SRA;
<*> 127 310 RZ Return to DASXR if equal;
<*> 130 077 CMC Else reverse inequality flag;
<*> 131 341 POP H Clear return address by popping;
<*> 132 303 062 <*> JMP FRXIT Bust out to function exit logic;
<*> 135 343 SASIX XTHL UDRHL to TOS; FRRET=FRCOMMAND
address to TOS;
<*> 136 042 155 <*> SHLD SASIC+1 Store FRCOMMAND address in CALL;
<*> 141 341 POP H TOS=UDRHL to DRHL clear return;
<*> 142 343 XTHL UDRHL to TOS; USRRET=PLAD to DRHL;
<*> 143 315 000 <*> CALL SASNT Call SASNT to load Parameters;
<*> 146 343 XTHL USRRET=PLAD+3 to DRHL; FDRHL to TOS;
<*> 147 176 MOV A,M Immediate character value to SRL;
<*> 150 043 INX H Incr USRRET=PLAD (+4 immed group);
<*> 151 343 XTHL True USRRET to TOS; FDRHL to DRHL;
<*> 152 157 MOV L,A Move ICV to SRL;
<*> 153 032 SASIL LDAX D Indexed FIELD char to SRA;
<*> 154 315 000 000 SASIC CALL Q'000000' CALL the execution commands;
<*> 157 022 STAX D Store result in indexed FIELD;
<*> 160 023 INX D Incr FIELD address Index;
<*> 161 045 DCR H Decrement length/size;
<*> 162 302 153 <*> JNZ SASIL Loop until count is zero;
<*> 165 303 062 <*> JMP FRXIT Jump to funct routine exit logic;
<*> 170 315 135 <*> NICH CALL SASIX CALL SASIX execution control rtn
passing address of following;
<*> 173 245 ANA L Logical AND SRL=ICV to SRA;
<*> 174 311 RET Return to SASIX;
<*> 175 315 135 <*> OICH CALL SASIX See NICH comment at address 170;
<*> 200 265 ORA L Logical OR SRL to SRA;
<*> 201 311 RET Return to the SASIX routine;
<*> 202 315 135 <*> XICH CALL SASIX See NICH comment at address 170;
<*> 205 255 XRA L Logical XOR SRL to SRA;
<*> 206 311 RET Return to SASIX;
<*> 207 315 135 <*> MVICH CALL SASIX See NICH comment at address 170;
<*> 212 175 MOV A,L Move SRL to SRA;
<*> 213 311 RET Return to SASIX;
<*> 214 343 VALFX XTHL UDRHL to TOS; FRRET=FRCOMMAND
address to DRHL;
<*> 215 042 227 <*> SHLD VALFC+1 Store FRCOMMAND address in CALL;
<*> 220 341 POP H TOS=UDRHLto DRHL clear return;
<*> 221 343 XTHL UDRHL to TOS; USRRET=PLAD to DRHL;
<*> 222 315 000 <*> CALL SASNT Call SASNT to load parameters;
<*> 225 032 VALFL LDAX D Indexed FIELD character to SRA;
<*> 226 315 000 000 VALFC CALL Q'000000' CALL the execution commands;
<*> 231 302 062 <*> JNZ FRXIT If character not valid exit;
<*> 234 023 INX D Incr FIELD address Index;
<*> 235 045 DCR H Decrement length/size;
<*> 236 302 225 <*> JNZ VALFL Loop until count Is zero;
<*> 241 303 062 <*> JMP FRXIT Jump to exit all chars valid;
<*> 244 315 214 <*> VALAS CALL VALFX CALL VALFX execution control rtn
passing address of following;
<*> 247 376 050 VALAC CPI Q'040' Is SRA a space?
<*> 251 310 RZ Return to VALFX if equal;
<*> 252 376 145 VALAO CPI Q'101' Is SRA an 'A'?
<*> 254 330 RC Return to VALFX if less than 'A';
<*> 255 376 204 CPI Q'132' Is SRA a 'Z'
<*> 257 310 VALXT RZ Return to VALFX if equal;
<*> 260 320 RNC Return to VALFX if greater;
<*> 261 277 CMP A Compare SRA to SRA force Z=1;
<*> 262 311 RET Return to VALFX char is valid;
<*> 263 315 214 <*> VALNS CALL VALFX See VALAS comment at addr 244;
<*> 266 376 074 VALNC CPI Q'060' Is SRA a '0'?
<*> 270 330 RC Return to VALFX if less;
<*> 271 376 107 CPI Q'071' Is SRA a '9'
<*> 273 303 257 <*> JMP VALXT Jump to validation exit logic;
<*> 276 315 214 <*> VALOS CALL VALFX See VALAS comment at addr 244;
<*> 301 376 074 VALOC CPI Q'060' Is SRA a '0'?
<*> 303 330 RC Return to VALFX if less;
<*> 304 376 103 CPI Q'067' Is SRA a '7'?
<*> 306 303 257 <*> JMP VALXT Jump to valicfation exit logic;
<*> 311 315 214 <*> VALXS CALL VALFX See VALAS comment at addr 244;
<*> 314 315 247 <*> VALXC CALL VALAC Call VALAC utility routine;
<*> 317 310 RZ Return to VALFX if alphabetic;
<*> 320 315 266 <*> CALL VALNC Call VALNC utility routine;
<*> 323 311 RET Return to VALFX;
<*> 324 315 214 <*> VALHS CALL VALFX See VALAS comment at addr 244;
<*> 327 315 266 <*> VALHC CALL VALNC Call VALNC utility routine;
<*> 332 310 RZ Return to VALFX if numeric;
<*> 333 376 145 CPI Q'101' Is SRA an 'A'?
<*> 335 330 RC Return to VALFX if less;
<*> 336 376 152 CPI Q'106' Is SRA an 'F'?
<*> 340 303 257 <*> JMP VALXT Jump to validation exit logic;
<*> 343 343 MVSYM XTHL UDRHL to TOS; USRRET=PLAD to DRHL;
<*> 344 315 010 <*> CALL DASNT Call DASNT function entry rtn;
<*> 347 343 XTHL USRRET=PLAD+5 to DRHL; FDRHL to TOS;
<*> 350 176 MOV A,M Move stop char to SRA;
<*> 351 043 INX H Incr USRRET=TRUERET=PLAD+6;
<*> 352 343 XTHL True USRRET to TOS; FRDHL to DRHL;
<*> 353 157 MOV L,A Move stop char from SRA to SRL;
<*> 354 345 PUSH H DRHL to TOS for length moved calc;
<*> 355 032 MVSYL LDAX D Indexed FIELD2 char to SRA;
<*> 356 275 CMP L Compare it to stop char;
<*> 357 312 371 <*> JZ MVSYX If equal go to MVSYM exit logic;
<*> 362 002 STAX B Else store in indexed FIELD1;
<*> 363 003 INX B Incr FIELD1 address Index;
<*> 364 023 INX D Incr FIELD2 address index;
<*> 365 045 DCR H Decrement length/size;
<*> 366 302 355 <*> JNZ MVSYL Loop until count is zero;
<*> 371 361 MVSYX POP PSW DRHL from 354 is popped SRA=len;
<*> 372 224 SUB H Subtr remaining len = moved len,
<*> 373 341 POP H True USRRET to DRHL;
<*> 374 301 POP B UDRPSW&A discarded by this pop;
<*> 375 303 065 <*> JMP FRXT2 Exit skipping SRA restore;
[Here as 8080 assembler routine
and here as Z80 assembler routine]
Scanned by
Werner Cirsovius
September 2002
© BYTE Publications Inc.