"NEC Programmers Reference"? OK - I'll bite...
On 10/25/17, Stephen Adolph <[email protected]> wrote: > Boy I wish we could all agree on variable names in M100! > > here is my assessment of what you've done- > > 1) you are using the wrong starting location. Think you need to use the > ASCTAB (DOSTART?) location which is the lowest first byte of .DO file data. > 2) you need to ensure your new directory entry gets the correct > (incorrect) address , meaning you need to trick LNKFIL (DIROK?) to order > the file names correctly. in this case ASCTAB-1. in this way the current > directory entry, that points to ASCTAB, will be ordered and linked > correctly. > > make sense? > and I agree with John, without the NEC reference I would never have gotten > REX to work. > > > On Wed, Oct 25, 2017 at 4:59 PM, Stephen Adolph <[email protected]> > wrote: > >> >> >> Here is some code to look at. >> do you run LNKFIL afterwards? you must! >> >> note you must ensure the address of the new file name in the ram >> directory >> is 1 less than the actual starting location to ensure LNKFIL orders the >> file names correctly. >> >> >> >> ramfile_copy_DO: ; new directory entry address in TEMP3 >> ; source directory entry at input buffer >> >> ; ASCTAB-1 start of new file in directory entry >> ; make xx byte hole at ASCTAB, xx is file length incl >> EOF >> ; copy data to hole >> ; LNKFIL >> >> lhld BINTAB ; hl points to injection point >> shld TEMP3 ; store injection point in TEMP3 >> dcx h >> shld TEMP1 ; start address for new directory entry in >> TEMP1 >> >> call ramcopy_makehole ; make the hole >> call ramfile_copy_file ; copy the data into the hole >> jmp rammenu_loop0 ; done >> >> ;----------------------------------------------------------- >> ---------------- >> ramcopy_makehole: >> >> lhld TEMP4 ; get length of file >> push h ; on stack >> >> ........ >> >> pop b ; length of file in bc >> >> lhld TEMP3 ; hl is injection point >> >> rst 6 >> .dw MAKHOL ; make hole BC long at HL, adjusting >> pointers >> >> ; MAKHOL adjusts BINTAB, VARTAB, ARYTAB >> ; MAKHOL does not adjust ASCTAB, needed by LNKFIL >> >> >> jc ramfile_copy_fail4 ; jump here if not enough space >> >> ret >> >> >> ;----------------------------------------------------------- >> ---------------- >> ramfile_copy_file: ; copy the data into the hole >> >> ; TEMP2 new directory entry address >> ; INPUT_BUFFER source directory entry, points to >> source file >> ; TEMP3 injection point of new file >> ; TEMP1 start address for directory entry >> ; TEMP4 size >> ; TEMP5 source data (system file) >> >> lhld TEMP4 >> mov b,h >> mov c,l ; get size in BC >> >> lhld TEMP3 ; target in hl >> xchg ; target in de >> >> lda DSTATE >> ani 10000000b >> jz ramfile_copy_file_1 >> ; use when in ram file mode >> lhld INPUT_BUFFER+1d >> call fix_hl_mode ; correct hl for lower block >> >> ; hl source, de target >> call ramfile_copy_block ; copy block >> jmp ramfile_copy_file_2 >> >> ramfile_copy_file_1: ; use when copying system files >> lhld TEMP5 ; hl = source >> ; hl source, de target >> xchg ; de source hl target >> call MOVEB_D_H ; mov bc bytes from de to hl >> >> ramfile_copy_file_2: >> >> lhld TEMP2 ; TEMP2 holds pointer for new directory >> entry >> inx h >> xchg >> lhld TEMP1 ; start address for directory entry in hl >> shlx ; store new start of file into new directory >> entry >> >> rst 6 >> .dw LNKFIL ; fix up directory >> >> >> ret >> >> >> On Wed, Oct 25, 2017 at 4:40 PM, Stephen Adolph <[email protected]> >> wrote: >> >>> willard, would commented assembly help? >>> I have this working in REX Manager... >>> >>> >>> On Wed, Oct 25, 2017 at 4:20 PM, Willard Goosey <[email protected]> wrote: >>> >>>> So, there is this (from Mike Nugent's RAM-ROM file) >>>> >>>> ;2239H - Insert entry into directory. >>>> ; Entry: >>>> ; HL - Points to empty directory slot >>>> ; DE - Contains address of file in RAM >>>> ; A - Attribute (80h=.BA, C0h=.DO, A0h=.CO, etc.) >>>> ; Note: Routine gets filename from FC93H, where it must be >>>> ; stored,padded with spaces, no delimiter. >>>> ; Exit: DE - Unchanged >>>> >>>> And I have the ROM call itself working in smallclib... but this is only >>>> part of the story. To use this successfully (ie without causing a cold >>>> start) we need to know more about it. >>>> >>>> I've been trying to create a .DO file. >>>> >>>> 1) Where do yo get a starting address for the file? I've tried every >>>> variant of COSTART (FBB0h) and DOSTART (FBAEh). At best I can get is >>>> intact DO files and the CO file directory entries switched around >>>> (using >>>> COSTART-1). DOSTART results in the text files being switched around and >>>> the binary files remaining correct. Anything else (COSTART or >>>> DOSTART-1) leads to file corruption and/or cold starts. >>>> >>>> 2)Is there a second directory-repair routine, besides DIROK (2146h)? >>>> Because DIROK() is not being sufficient. :-( >>>> >>>> Here is the test code. DO NOT USE!!!! >>>> /*tmf.c >>>> *Test MakFil >>>> *test for Model 100 Small C-85 Library >>>> * >>>> *Willard Goosey >>>> *[email protected] >>>> *10/19/2017 >>>> */ >>>> >>>> #include "m100vars.h" >>>> #include "dir.h" >>>> >>>> /*MAKFIL extension bytes: */ >>>> #define BA 0x80 >>>> #define DO 0xC0 >>>> #define CO 0xA0 >>>> >>>> main(char A, char *HL) >>>> { >>>> char *name; >>>> struct dir *slot; >>>> char *start; >>>> int i; >>>> >>>> name= "RTMF1.DO"; >>>> start= COSTART-1; //start at beginning of CO files >>>> >>>> slot=FREDIR(); >>>> >>>> hex16(start);CRLF(); >>>> >>>> prsnam(name,strlen(name)); >>>> >>>> hex16(makfil(slot,start,DO)); CRLF(); >>>> if(makhol(1,start)<0) >>>> { >>>> BEEP(); >>>> MENU(); >>>> } >>>> *start=0x1a; >>>> //makfil doesn't autoinsert EOF >>>> DIROK(); >>>> } >>>> >>>> HELP!!!! >>>> Willard >>>> -- >>>> Willard Goosey [email protected] >>>> Socorro, New Mexico, USA >>>> I search my heart and find Cimmeria, land of Darkness and the Night. >>>> -- R.E. Howard >>>> >>> >>> >> >
