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"