Instead of brute force I did a simple test, lean, fast but incomplete. Incomplete in two ways, I tested only the modules enclosed with V41 and few more found by chance on my PC, and the test detects only "permanent" buffers (those surviving a power cycle). So use of buffer #7 from Skwid's X-IL (aka EXT-IL) remains undiscovered.
What I did: I prepared a LOD file template with almost all buffers (no buffer #0 as it's questionable it could coexist with key assignments), added a MOD to test, saved the LOD, started V41 with it, switched emulated HP41 on, ended V41 after 2 seconds and analysed the remaining buffers. And same again with next MOD.
Result:
- Code: Select all
Modules #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #A #B #C #D #E #F
ADVANTAGE 5
BOOST 3 F
CCD 5
CCD-MODIFIED 5
CCD-OSX 5
CMT-200 C
CMT-300 D
DAVIDASSM 1 2
ES-41 3 4 E
EXT-IL 6
FORTH D
HPIL-DEV C
HPIL-DIAG B
OSX_BS4X 5
OSX_BS4X-P6 5
OSX_BS4X-P7 5
PLOTTER B
SM_OSX_BS4X_P6 5
SM_OSX_BS4X_P7 5
TIME A
As mentioned afore, vertically incomplete and limited to permanent buffers only.
Conclusion: an automated interference check for buffer-IDs is only possible with an up-to-date table.
For those interested in my script:
- Code: Select all
/* which 41-ROM claims which buffer */
call RxFuncAdd 'RxPipe', 'RXPIPE', 'RXPIPE' /* see PIPE.HTM */
/* mods.list from DIR /B *.MOD > mods.list */
call RxPipe '< mods.list!spec 1;-5!xlate!nfind NUT!change / /%20/!stem mods.'
say 'To do:' mods.0 'MOD files.'
mgr = .WindowsManager~new
dtw = mgr~desktopWindow
do mod = 1 to mods.0
say 'Testing' mods.mod
call RxPipe '(end ?) literal $MODULE' mods.mod'!a:fanin!> bufchk.lod',
'? < bufchk.txt!a:'
'' "start /b C:\prgm\HP-Emulators\V41\V41.exe" ".\bufchk.lod"
Call SysSleep .2 /* wait until V41 is ready to run */
dtc = dtw~firstChild
do until dtc = .nil
if dtc~wClass = "#109",,
right(dtc~title, 6) = "bufchk", /* gotcha */
then leave
dtc = dtc~next
end
if dtc = .nil then exit MessageDialog("No V41 with bufchk.LOD running?", 0, "Note")
dtc~sendKeyDown("F2") /* push ON */
Call SysSleep .01
dtc~sendKeyUp("F2") /* release ON */
Call SysSleep 2 /* in few cases too short */
dtc~processMenuCommand("&File", "E&xit") /* quit */
Call SysSleep .1
call RxPipe '< bufchk.lod!frlabel :RAM 0C0!take 32',
'!nlocate 13-* /A5 5A A5 5A A5 5A/',
'!nlocate 14 /0/!nlocate 10 /0/!spec 11!uniq',
'!literal' mods.mod || '!join * /;/!l fs ; f2!>> ubu.txt'
end
::requires 'winsystm.cls'
::requires "ooDialog.cls"