/*********************************************************************** / / WPSPEL holes for blasting / / Code moved out for blasting to accomodate multinational / characters in the dictionaries and documents. / /*********************************************************************** FIELD 6 / Assemble in field 6, out of way of / Spell code. *SPHOLE / Assemble it to run in the hole page. CDFMYF=CDFMTH /---------- / / LODAPU - LOaD the APU / /---------- SPHLAPU,XX CDFMYF / Map to spell field DCA I (TIMES) / clear wait loop flag AC0001 / set DCA I (UPDCLK) / update clock flag CDFMNU / Map menu field. TAD (BUFADR) / Init queue block parameters. DCA I (CMDBLK+RXQBAD) / Buffer address. /M003 TAD (CDFTXT) / ... DCA I (CMDBLK+RXQBFD) / Buffer field. /M003 DCA I (CMDBLK+RXQRS1) / Init block count to the default (1). /M003 TAD (OLL301) / Reset the field 2 lock words. DCA I (OLL301) / field 5 lock word. TAD (OLL301) / ... DCA I (OLL400) / and field 6 lock word. TAD I (MUBUF+MNOPTC) / Check for spelling corrector active /A002 AND (SEDBIT) / ... /A002 SZA CLA / Skip if not active /A002 AC0001 / else set and ... /A002 DCA CORACT / Save CORrector ACTive flag /A002 / See if we're loading the user dictionary. TAD I (MUBUF+MNTMP6) / this will be 6 for SC; 7 for LU. TAD (-7) / This yields -1 for SC, 0 for LU, or /M008 / +4 for UD. /A008 DCA INIUSR / Set the SC/LU/UD indicator. /A008 /D004 TAD I (MUBUF+MNOPTN) / Get the option word. /D004 AND (MNRX7X) / Is the APU loaded? TAD I (MUBUF+MNPULD) / Get the external processor loaded word/A004 AND (MNRX0X+MNRX1X) / Is the "APU" loaded ? /A004 SNA CLA / Skip if yes. check for LU & overwrite. JMP LODAP1 / APU not loaded. Go load it. TAD INIUSR / Are we loading the user dictionary? SZA CLA / Skip if yes. JMP LODXIT / Normal SC run & APU is already loaded. TAD I (MUBUF+MNTMP5) / See if OVERWRITE (<>0) option. SNA CLA / Skip if yes. JMP LODXIT / For ADD (0) to user dictionary, nothing more to do. CDFMYF / Back to current field. TAD (PCINUD) / Tell loaded Z80 to INIT the user dictionary. JMS SNDAPU / ... JMP LODAP3 / Go wait for the done status. LODAP1, CDFMYF / Back to current field. IFNDEF DEBUG < / Don't assemble this if going out the comm line. TAD XPUFLG / Is the external processor an XPU /A004 SZA CLA / Skip if not .. continue w APU code /A004 JMP LODXPU / else branch to XPU specific code /A004 / loop LODAP2, JMS MMCMD / load address - ( 16-bit ) 0!CDBIT!XRBIT / ( 2 byte starting address for data xfer ) TAD STRTAH / get the starting address ( high order byte ) JMS SNDAPU / send to APU TAD STRTAL / ... ( low order byte ) JMS SNDAPU / send to APU JMS MMCMD / load byte count ( 2 bytes ) 1!CDBIT!XRBIT / ... AC0002 / Hi byte of 1000. JMS SNDAPU / high order length JMS SNDAPU / low order 8-bit byte of 1000. CIFMNU / Update the date & time display. JMS I (TIMDSP) / ... JMS MMCMD / load data to Z80 RAM - ( until byte count=0 ) 2!CDBIT!XRBIT / ... TAD STRTBK / block number to load JMS PUTBLK / output the data AC0002 / bump to correct load address TAD STRTAH / DCA STRTAH / high byte starting address for next block ISZ STRTBK / bump to next block ISZ NMBRBK / bump block count JMP LODAP2 / more blocks to load / until: all blocks loaded / Now start up the APU & wait for the done code. JMS MMCMD / load the PC 33!CDBIT!XRBIT / ( '1B' hex - load register pair ) TAD (GTAPU1%400) / get starting address JMS SNDAPU / output the address ( high byte ) IFNZRO GTAPU1&377 < TAD (GTAPU1&377) / ... > / IFNZERO GTAPU1&377 JMS SNDAPU / ... ( low byte ) JMS MMCMD / run from RAM 4!CDBIT!XRBIT / ( from saved PC address ) > /IFNDEF DEBUG LODAPM, / Merge from LODXPU /M004 /d004 TAD I (MUBUF+MNOPTN) / Get options word. /d004 TAD (MNRX7X) / Add in the 'Z80 loaded' bit. /d004 DCA I (MUBUF+MNOPTN) / Store new options word. JMS SETLDB / Go set the load bits /A004 TAD (RAMFIL) / Set file # to indicate RAM load file reads. DCA FILNUM / ... LODAP3, JMS GETAPU / wait for a response -36 / Time-out wait maximum - 30 seconds. PCDONE;LODAP4 / done, exit 0 / all others are fatal LODAP4, TAD (MSTRLX) / Set file # to indicate master lex. file reads DCA FILNUM / ... LODXIT, CDFSPL / date field to spell DCA I (UPDCLK) / clear update clock flag LODXYT, CIFMNU / Return CIF goes here. JMP I SPHLAPU / finished loading 1 'something' STRTBK, HMCODE / starting block # /M004 NMBRBK, -50 / -# of blocks to load PAGE /---------- / / LODXPU - LOad the XPU / / This code is branched to from LODAPU to perform the / the XPU specific stuff involved in loading the Z80. / Control is returned to a merge re-entry point in LODAPU / /---------- LODXPU, / Z80 address space on the XPU is / 20000-3FFFF hex (on even byte bounds) / Segment register=2000h to address this space JMS I LODXP1 / Send monitor command 1054 / =22Ch=Write memory segment(MS) register CLA / Low byte=0 JMS I LODXP2 / Send it to the XPU TAD LODXP3 / High byte = 20h JMS I LODXP2 / Send it to the XPU JMS I LODXP4 / Wait for status returned from monitor JMS I LODXP1 / Send monitor command 1053 / =22Bh=Write memory offset(MO) register TAD STRTAL / Get low byte of starting address RAL / x2 since we are wrting even bytes JMS I LODXP2 / Send it to the XPU TAD STRTAH / Get high byte of starting address RAL / x2 since we are wrting even bytes JMS I LODXP2 / Send it to the XPU JMS I LODXP4 / Wait for status returned from monitor LODXPN, CIFMNU / Update the date & time display. JMS I LODXP5 / ... JMS I LODXP1 / Send monitor command 5 / =Write block on even bytes TAD I LODXP6 / Get block # to write JMS I LODXP7 / & go write it TAD I LODXP8 / Set BlocK transfer DoNe bit into AC X80ST / & write it to XPU status register CLA / Clear garbage left in AC JMS I LODXP4 / Wait for status returned from monitor ISZ I LODXP6 / bump to next block ISZ I LODXP9 / bump block count JMP LODXPN / more blocks to load / until: all blocks loaded / Now start up the XPU & wait for the done code. JMS I LODXP1 / Send monitor command 1074 / =23Ch=write z80 PC TAD STRTAL / Get low byte of starting address JMS I LODXP2 / Send it to the XPU TAD STRTAH / Get high byte of starting address JMS I LODXP2 / Send it to the XPU JMS I LODXP4 / Wait for status returned from monitor JMS I LODXP1 / Send monitor command 11 / =9h=startup Z80 JMS I LODXP4 / Wait for status returned from monitor JMP I LODXP0 / Merge back with original stream / All addresses required by LODXPU are here so that the routine is blasted / complete. LODXP0, LODAPM LODXP1, MMCMD LODXP2, SNDAPU LODXP3, 40 LODXP4, MMSTA LODXP5, TIMDSP LODXP6, STRTBK LODXP7, PUTBLK LODXP8, BKDNBIT LODXP9, NMBRBK /--------------- PAGE RELOC NOPUNCH