You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While testing my XMS implementation for 8086tiny ecm-pushbx/8086tiny@55bf203 I came upon several different, reproducable errors produced by different versions of FreeCOM. With a hack to make FreeCOM fail its XMS allocation, everything seemed to work and my own program (lDebug symbolic) successfully used the XMS interface.
I eventually chased the error to the handler that saves to XMS then is meant to jump into the resident portion:
push dx ; save DS of transient portion
push cs ; save segment of transient portion
push WORD ret_from_resident
push cx
push WORD real_XMSexec
retf
Push with an immediate is a 186+ instruction, but FreeCOM doesn't check for an 186 machine before using it.This likely wasn't noticed because XMS with actual extended memory requires a 286 at least.
The text was updated successfully, but these errors were encountered:
I disabled my first workaround and implemented the push imm16 instruction in my fork of 8086tiny. Now the XMS swapping works. Refer to ecm-pushbx/8086tiny@c09ef85
Indeed XMS on a 8086 is nonsense. But forcing cpu 8086 is not a bad idea in other places and there is a better way in any case (a "call far" instruction).
Some code in the cswap.asm is still not 8088-safe but for the above reason I'm not going to fix it (namely that early models did not disable interrupts for one instruction past mov ss, ...)
While testing my XMS implementation for 8086tiny ecm-pushbx/8086tiny@55bf203 I came upon several different, reproducable errors produced by different versions of FreeCOM. With a hack to make FreeCOM fail its XMS allocation, everything seemed to work and my own program (lDebug symbolic) successfully used the XMS interface.
I eventually chased the error to the handler that saves to XMS then is meant to jump into the resident portion:
freecom/shell/cswap.asm
Line 405 in 274b4a9
Push with an immediate is a 186+ instruction, but FreeCOM doesn't check for an 186 machine before using it.This likely wasn't noticed because XMS with actual extended memory requires a 286 at least.
The text was updated successfully, but these errors were encountered: