Restructured directories. Added in files from earlier prototypes and cleanly organized them.

This commit is contained in:
Olivier Poirier 2023-09-26 01:54:34 -07:00
parent 6eeb80fde1
commit 18a3cf9457
61 changed files with 151820 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1 @@
´€>||€>|* Š|ëåëþHello World!´

Binary file not shown.

Binary file not shown.

BIN
80286/BIOS/B0-Editor/backup Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,56 @@
00000000: b400 b002 cd10 c706 3f7c 007c b402 b700 ........?|.|....
00000010: b601 b20f cd10 803e 3f7c 3f7f 3f80 3e3f .......>?|?.?.>?
00000020: 7c1e 7f3f 8a06 0000 f626 3f7c eb3f c606 |..?.....&?|.?..
00000030: 3f7c 3ffe 053f 7ceb 3fc6 063f 7c3f eb3f ?|?..?|.?..?|?.?
00000040: c606 3f7c 3f88 e1eb 3fc6 063f 7c3f 88c9 ..?|?...?..?|?..
00000050: 3c09 7f05 c606 3f7c 303c 0f7f 05c6 063f <.....?|0<.....?
00000060: 7c37 0400 b40e cd10 eb00 c606 3f7c 0988 |7..........?|..
00000070: c8eb 3fc6 063f 7c00 b020 b40e cd10 fe06 ..?..?|.. ......
00000080: 3f7c ff06 3f7c eb3f 8a06 3f7c b40e cd10 ?|..?|.?..?|....
00000090: 8a06 3f7c b40e cd10 9090 9090 9090 9090 ..?|............
000000a0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000000b0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000000c0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000000d0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000000e0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000000f0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000100: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000110: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000120: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000130: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000140: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000150: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000160: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000170: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000180: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000190: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000001a0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000001b0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000001c0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000001d0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
000001e0: 9090 9090 9090 9090 9090 9090 90b4 00cd ................
000001f0: 163c 1b74 06b4 0ecd 10eb f2e9 3f3f 55aa .<.t........??U.

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ИЧU╙

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
ー ヘ乎以ヘ郁ヘー ヘ庫以ヘ郁ヘー ヘ袴以ヘ郁ヘー ヘ雇以ヘ郁ヘー ヘ瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞瑞<E7919E>Uェ

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

View File

@ -0,0 +1,45 @@
G {}
V {}
S {}
E {}
L 14 390 -860 410 -860 {}
L 14 410 -860 410 -790 {}
L 14 300 -720 480 -720 {}
L 14 480 -720 480 -660 {}
L 14 460 -690 480 -690 {}
L 19 650 -770 650 -760 {}
L 19 770 -790 790 -790 {}
L 19 790 -820 790 -790 {}
L 19 780 -730 800 -730 {}
L 19 800 -730 800 -710 {}
L 20 840 -760 840 -630 {}
L 20 500 -780 520 -780 {}
L 20 500 -780 500 -760 {}
L 20 30 -760 500 -760 {}
L 20 30 -760 30 -740 {}
L 20 820 -760 840 -760 {}
L 20 470 -630 840 -630 {}
L 21 860 -770 860 -660 {}
L 21 260 -790 510 -790 {}
L 21 830 -770 860 -770 {}
L 21 260 -660 860 -660 {}
P 5 5 540 -810 540 -770 760 -770 760 -810 540 -810 {}
P 5 5 540 -750 780 -750 780 -710 540 -710 540 -750 {}
P 19 4 650 -750 640 -760 660 -760 650 -750 {}
P 19 5 520 -820 520 -700 820 -700 820 -820 520 -820 {}
P 19 4 770 -780 770 -800 760 -790 770 -780 {}
P 19 4 790 -710 810 -710 800 -700 790 -710 {}
P 20 4 470 -620 470 -640 460 -630 470 -620 {}
P 20 4 20 -740 40 -740 30 -730 20 -740 {}
P 21 4 830 -760 830 -780 820 -770 830 -760 {}
P 21 4 520 -790 510 -780 510 -800 520 -790 {}
T {x86 Program Loader Routine} 10 -950 0 0 0.4 0.4 {}
T {Set Variables - Print Data Field Names} 20 -870 0 0 0.4 0.4 {}
T {Text/Hex Display Routine} 20 -800 0 0 0.4 0.4 {}
T {Set Variables - Print Colons} 20 -730 0 0 0.4 0.4 {}
T {Display Routine: Disable Memory Increment} 40 -700 0 0 0.4 0.4 {}
T {Display Routine: Enable Memory Increment} 40 -640 0 0 0.4 0.4 {}
T {Call Display Routine} 60 -670 0 0 0.4 0.4 {}
T {Text/Hex Display Routine} 520 -850 0 0 0.4 0.4 {}
T {Address Calculator} 550 -800 0 0 0.4 0.4 {}
T {Hext/ASCII Grid Display} 550 -740 0 0 0.4 0.4 {}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,168 @@
DATABASE LOGIC STEPPING PROGRAM - IMPLEMENTATION FILE
BX - Current Spot in DB
INITIALIZATION STEP
COMMENTS ASSEMBLY OPCODES
Op Dest [Src] Op Data
Setting Up Eval Actions
| Set Eval Result → <??> MOV <EvalLoc> ← ?? C606 ???? ??
Adjust Pointer To SIZELEN From SIZE
| Compare Skip Value To 0 CMP AL ← 00 3C ??
| Jump To Grab SIZELEN If Not 0 JNZ <Grab SIZELEN> 75 ??
| Skip Over Max SIZE ADD BX ← 0xFF 83C3 FF
Size Length Zero?
| Compare Size Length To Zero CMP [BX] ← 00 ???? 00
| Jump Result If Match JE <Result> 74 ??
The following function is set up to behave differently as it loops - to satisfy Initial, A, B and C requirements in the notes, in a single block of code.
CONDITIONAL SIZE
This is what we send back if SIZELEN is zero. Tells other programs we didn't find anything.
| Set DX to Zero Return Value MOV DX ← 01 00 BA 01 00
If SIZELEN is 0, all there is here is a zero. We're done!
| Grab SIZELEN to AL MOV AL ← [BX] 8A07
| Compare Data To 0 CMP AL ← 00 3C 00
| Jump if No Match JNE <Put SIZELEN in CL> 75 ??
The first cycle of this is NOP'd. This is designed to skip SIZELEN checks. Do we need this..?
| Jump To Increment BX (/ NOP) JMP <Increment BX/NOP> EB ??
I might not include this if I still can't think of why it's there. Maybe it was a jump point for custom SIZELEN interpretation? No point to that unless it's an E9 XXXX.
Store SIZELEN in CL, so we remember its real size. We might not use the whole size, and we might treat the value the same as other sizes.
But we will need to correctly skip over the real size of the data, so we need this to stick around.
| Put SIZELEN in CL MOV CL ← AL 88C1
This code can be hijacked at JB to handle SIZELENs above 5. Currently, the real size is remembered, but the data is treated as SIZELEN of 4 by the reader.
You can make it stop like at SIZELEN 0 if you like, just jump to the same spot as that JNE.
| Compare SIZELEN To 5 CMP AL ← 05 3C 05
| Jump if Below JB <Increment BX (T)> 72 ??
| Set SIZELEN To 4 MOV AL ← 04 B4 04
The SIZELEN now holds a value from 0x01 to 0x04. We ruled out 0x00 with the earlier check.
You will *hang* your system if this *ever* eats a 0x00 in AL. I make sure not to, but don't let that happen to you!
Always wrap this in a zero check!
Move BX to wherever the SIZE data is. can be one byte ahead, but can also be somewhere dependent on SIZELEN.
This needs to be fleshed out to handle that.
[ PLEASE IMPLEMENT ME! ]
Previous code for that was just an increment. The things I do for cool data structures.
| Add/Subtract Position To BX INC BX 43
The reason I'm sacrificing the glorious INC is so that the database can have a variable length SIZE field without changing the SIZELEN or the start position of the DB to other programs.
<---SIZE expands this way-| SIZELEN (1 byte) |-DB expands this way--->
Look how nice that is. Now imagine if SIZE's arrow had to go in the other direction. It'd overwrite or force data to move and that's not good.
In other words, fix 255 bytes for SIZE, take how many bytes you need, and set SIZELEN to reflect it. Ignore the unused bytes or add a silly <255 character comment.
We're dividing SIZELEN by 2. This will tell us two things - if the number is even, and if it's greater than two. This is everything we need to know.
Remember, the number is 0x01 to 0x04. With the above we can know exactly which number it is - more importantly, what to and not to do based on the number.
I specifically arranged the meanings attached to the numbers (since it's arbitrary) to make the check work in one pass.
| Set CH To 2 MOV CH ← 02 B5 02
| Divide AL By 2 DIV AL ← CH F6 F5
We're not returning that default value anymore - we want this zeroed. (Do we really?)
| Zero DX XOR DX ← DX 31 D2
Take the first word of SIZE and add it to the value in DX, which is now zero.
| Add Size Data To DX ADD DX ← [BX] 89 1F
Hey, wait a second. Can't I just do a MOV?
[ CHECK THIS LATER ]
If the SIZELEN was even, AH will be zero. We can skip the code for relative addresses - our address must be absolute.
| Compare AH to 00 CMP AH ← 00 80FC 00
| Jump Multiply AL JE <Multiply AL by 2> 74 ??
If the SIZELEN was odd, we run this code. First, we subtract the SIZE word, undoing what we did earlier.
| Subtract Size Data from DX SUB DX ← [BX] 2B 1F
Then we do the right thing - adding the SIZE *byte*.
| Add Size Byte to DX ADD DX ← [BX] 88 1F
Then, since this is relative, we add the current location.
| Add Current Location to BX ADD DX ← BX 8B D3
We exclude the size from this calculation.
| Add Size Length to DX ADD DX ← CL 8A D1
Because of our fancy SIZE structure, this isn't enough. We'll be sitting at SIZELEN in that case, so we'd also need to push forward by one.
We should add an Increment DX/NOP here. Single byte, so easy to NOP.
| Increment DX (/NOP) INC DX 42
[ DON'T FORGET TO NOP ME ON CONDITION! ]
1
00 01
2
01 00
3
01 01
04
02 00
Add the remainder to AL, then Multiply AL by 2.
| Add AH to AL ADD AL ← AH
| Multiply AL By 2 MUL AL ← CH
Intel uses 'Less' to describe signed integer < checks and 'Below' to describe unsigned < checks.
Signed means that 00-FF is split in uneven halves at the highest bit, and half is 'positive', half is 'negative'.
'Positive' numbers use up a spot for zero, so negative always goes one bit farther. If positive has up to the integer 3, negative will have up to -4, for example.
Try to avoid mixing up signed and unsigned checks, even when they would normally behave the same, unless you're doing something special.
If the value in AL
| Compare SIZELEN(AL) to 2 CMP AL ← CH 3C 02
| Jump if Below or Equal JBE
| Increment BX INC BX 43
| Jump To Increment BX (/ NOP) JMP <Increment BX/NOP> EB ??
|

View File

@ -0,0 +1,135 @@
DATABASE LOGIC STEPPING PROGRAM - BRAINSTORMING FILE
All data is in Big Endian unless marked otherwise.
SZsz [stSTlnLN [...]] ← non-optimized SIZELEN - may not have homogeneous SIZE
sz [stln [...]] ← using optimized SIZELEN - homogeneous SIZE (fast index / search!)
( db index number * db entry size ) + start of DB = location of homogeneous entry
non-homogeneous entries cannot do this because 'db entry size' is not constant.
You'd have to do some special work to tackle that, like sorting the DB by entry sizes to speed up indexing.
Smallest DB ( not including interpreter ) : 0x XX XX XX
| 3 bytes with optimized SIZELEN - contains a single arbitrary,
| non-empty entry
: 0x 01 03 01 00 00
| 5 bytes with non-optimized SIZELEN - single entry, [0x00,0x0]
| (starts after end of DB, length of one byte)
: 0x 00
| 1 byte if empty
Add 255 → BX
.- Size Length Zero? SIZELEN
| Subtract SIZELEN → BX
| CONDITIONAL SIZE EVAL → <??> ←----------. SIZE
| ADD <??> (/00) → BX ←------------------|-.
|- Past DB End? | |
| Conditional Jump - Program State | |
| | | |
|- A | Start Length Zero? -----------------: | STARTLEN
| | | Set Jump to B ----------------------: |
| | | Set Eval Result → <??> | |
| | | Jump CONDITIONAL SIZE EVAL----------: | START
| | | |
| B | Set Eval Result → <??> | | LENLEN
| | | Set Jump to C | |
| | | NOP Out BX Increment | |
| | | Jump CONDITIONAL SIZE EVAL----------' | LEN
| | |
| C | Set Jump to A |
| | Re-Add BX Increment |
:----| Jump CONDITIONAL DATABASE OPERATION | <DATABASE 'FILE'>
| | Jump Increment BX --------------------'
|
'→ Result → <??>
Conditional Size Evaluation Function
(up to 255 bytes - our implementation will only handle up to four)
SIZE SIZELEN DESCRIPTION
------------ 0x 00 Return 0x 01 00 (little endian)
0x 00 0x 01 Distance after end of SIZELEN
0x 0000 0x 02 Absolute location
0x 00 0000 0x 03 Distance after end of SIZELEN, segment location override
0x 0000 0000 0x 04 Absolute location, segment location override
0x >00000000 0x >04 Same as 0x04, skip extra bytes
DISTANCE / ABSOLUTE
(ODD) 3 1__ ____4 2 (EVEN)
| `/. |
(> 2) 3 4--` `--1 2 (!>2)
SEGMENT / NO SEGMENT
Compare to 2 ...
SIZELEN Empty
AL AH
1,2 3,4 What's There?
!>2 >2 Check To Determine Value
------------------------------------------------------
!SEG SEG Action To Take
Divide By 2...
Quotient Remainder
AL AH
0 1 What's There?
XOR [BX] → DX - Zero DX
ODD?
SUB [BX] → DX - Subtract the full location amount
ADD [BX] → DL - Start with the size data
ADD BX → DX - Add our current location
ADD CL → DX - Add the size of our size descriptor
ADD [BX] → DX - Add the full location amount
- Not Used - 2,4 1,3 Indicated SIZELEN Value
!=1 =1 Check to Determine Value
EVEN ODD Contextual Meaning
------------------------------------------------------
ABS DIST Action To Take
(This handling can be modified! It's really just a fancy way of encoding where
something is. This version uses x86 16-bit memory addressing.)
Consider: Optimized Fast Address Returns?
SIZE Described Addresses | Quick n' Dirty Directly Returned Addresses (Optimized Stuff)
SIZELEN 00 01 02 03 04 05 06 07 08 09 0A 0B 0C | 0D 0E 0F 10 11 12 13 14 15 16
|
SIZE 00 -- (returns smallest valid data) | -- -- -- -- -- -- -- -- -- --
(Return Directly) |
0x 01 00 (little endian) |
01 XX | -- -- -- -- -- -- -- -- -- --
02 XX xx | -- -- -- -- -- -- -- -- -- --
.. -- XX←xx←xx←xx←xx←xx←xx←xx←xx←xx←xx←xx | -- -- -- -- -- -- -- -- -- --
|(Return Directly)
| 0123 4567 89AB CDEF ... ... ... ... ... ...

View File

@ -0,0 +1,63 @@
Set Statics
(Interrupt used is 0x10: Video Interrupt)
BH 0x00 Page 0 (Could use XOR here)
BL 0x-- Non-Special Attribute
DL 0xXX Initial Column
DH 0xXX Initial Row
ES 0xXXXX Move DS to ES here, or set to your liking.
BP 0xXXXX Set to wherever your string starts. Match it to the offset.
Template
[ ] |
|
Set Initial Statics
[ ] MOV DX 0x---- | BA ---- Set Initial Column And Row
[ ] MOV BX 0x--00 | BB --00 Set Non-Special Attribute, Write To Page 0 of Video Memory
[ ] MOV AX 0x0013 | B8 0013 Set Video Interrupt to: Write String Mode, String Format 00
(String Format: Pure CP437, Attribute in BL, do not move cursor)
[ ] MOV SI 0x---- | BD ---- Set Memory Location of Data To Print
[a] JMP ?? | EB ?? Jump To: d
Set Post Execution Statics
[b] INC BP | FF C5 Advance Memory
[c] INC DL | FE C6 Advance Cursor
[d] XOR CX | 31 C9 Zero Count
Check Execution Progress
[ ] MOV DI AX | 8B C7 Move ColMax, RowMax to AX
[e] CMP AL 0x-- | 3C -- Check ColMax
[ ] JB 0x-- | Skip If Below ColMax
[f] CMP AH -- | Check RowMax
[ ] JGE | Stop Execution If
[g] INC CX | Advance Count
Set Lock State
[ ] MOV AL SI | Retrieve Current Memory Value
[h] CMP AX | Lock Effect Switch
[ ] MOV BL 0x-- | Set Special Attribute To Lock
[ ] MOV 0x---- 0x---- | C706 ---- ---- Set Lock Effect Switch To Excution
Execution
[j] | Execute
[ ] INT 10 | CD 10 Call Video Interrupt
[k] | Jump To: b

View File

@ -0,0 +1,140 @@
Word Register Reference
AX - DB Value
BX - DB Position
CX - Displacement Value/DB Value
DX - Displacement Value/DB Position Backup
Byte Register Reference
AL - DB Type Byte
Other Registers Unused
Operational Data Reference
Bytes Description
2 Pointer DB Start
2 Pointer DB End
2 Pointer DB Position
1 Pointer Type
2 Pointer Data
2 Range DB Start
2 Range DB End
2 Range DB Poisition
1 Range Type
2 Range Start
2 Range End
2 Displacement Start
2 Displacement End
2 Displacement Value
Pointer Type Byte Specification A
0x0, 0x6-FF - Empty Word
0x1 - Byte Relative
0x2 - Word Relative
0x3 - Word Absolute
0x4 - Byte Relative to Word Relative (B2W)
0x5 - Word Relative to Byte Relative (W2B)
Range Type Byte Specification A
Range : Consists of Start Word Pointer, End Word Pointer
0x0 - 0x3-FF - Empty DoubleWord
0x1 - Inactive Range
0x2 - Active Range
Pointer Calculation Procedure Specification A
0x: Omit Data Here (0 Bytes)
Jump Description
Aa Limit Check
CMP Pointer DB Position with Pointer DB End
JGE Exit
(Ba) JMP/0x Read Type
Ba Read Type
MOV [BX] → AL
Read Pointer Data
INC BX
MOV [BX] → CX
Check Displacement
CMP CX ⇄ Displacement Start
(Ca) JB Check Type Zero
CMP CX ⇄ Displacement End
(Ca) JA Check Type Zero
JMP/0x Add Displacement
Add Displacement
ADD Displacement → CX
(Ca) JMP/0x Check Type Zero
Ca Check Type Zero
CMP AL ⇄ 0x0
(?a/?b) JA Next Field
(Da/Db) JMP/0x Check Type Empty (Pointer/Range)
Da Check Type Empty (Pointer)
CMP AL ⇄ 0x5
(?a) JA Next Field (Pointer)
(Ea) JMP/0x Check Type 0x1 (Pointer)
Db Check Type Empty (Range)
CMP AL ⇄ 0x2
(?a) JA Next Field (Range)
(Eb) JMP/0x Check Type 0x1 (Range)
Ea Check Type 0x1 (Pointer)
CMP AL ⇄ 0x1
(?a) JE Check Convert 0x1 (Pointer)
(?a) JMP/0x Check Type 0x2 (Pointer)
Fa Check Type 0x1 (Range)
CMP AL ⇄ 0x1
(?a) JE Check Convert 0x1 (Range)
(?a) JMP/0x Check Type 0x3 (Range)
Eb Check Type 0x2 (Pointer)
CMP AL ⇄ 0x2
(?a) JE Check Convert 0x2 (Pointer)
(?a) JMP/0x Check Type 0x3 (Pointer)
Fb Check Type 0x2 (Range)
CMP AL ⇄ 0x2
(?a) JE Check Convert 0x2 (Range)
(?a) JMP/0x Check Type 0x3 (Range)
Gb Next Field (Range)
ADD BX + 0x4
(Aa) JMP/0x Limit Check
Ec Check Type 0x3 (Pointer)
CMP AL ⇄ 0x3
(?a) JE Check Convert 0x3 (Pointer)
(?a) JMP/0x Check Type 0x4 (Pointer)
Ed Check Type 0x4 (Pointer)
CMP AL ⇄ 0x4
(?a) JE Check Convert 0x4 (Pointer)
(?a) JMP/0x Check Type 0x5 (Pointer)
Ee Check Type 0x5 (Pointer)
CMP AL ⇄ 0x5
(?a) JE Check Convert 0x5 (Pointer)
(?a) JMP/0x Next Field (Pointer)
Ga Next Field (Pointer)
ADD BX + 0x2
(Aa) JMP/0x Limit Check

View File

@ -0,0 +1,42 @@
Steps:
Pointer Database Correction
Initialize Registers
| Loop: BX < Pointer DB End
| AL = 0x0
| * Next Field (Pointer)
AL < 0x2
Zero DH, Increment BX, Move [BX] to DL, Decrement BX
Add Displacement (CX) to DX
Decrement AL, Add AL to Displacement
Convert Byte-To-Word
Range Database Check
Initialize Registers
Move BX to DX
Move Range DB Start to BX
Loop: BX < Range DB End
Type not 0x2
* Next Field (Range)
Add Displacement End to Displacement Value in CX
Range End > CX
Range Start < CX
Subtract Displacement End from Displacement Value in CX
Add Range End to
Next Field (Range)
Finished
* Initialize Registers
No
* Next Field (Pointer)
0x3, 0x4
Subtract Type-0x3 from Displacement
Word-To-Byte Check
Yes
Convert Word-To-Byte
* Initialize Registers
No
* Next Field (Pointer)
| Next Field (Pointer)
Finished! Perform Changes

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

View File

@ -0,0 +1,402 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000"
height="1000"
viewBox="0 0 264.58333 264.58334"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="Pointer Correction Graph.svg">
<defs
id="defs2">
<marker
style="overflow:visible;"
id="Arrow1Lend"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path1063" />
</marker>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter1587"
x="-0.0263094"
width="1.0526188"
y="-0.021265381"
height="1.0425308">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.058255943"
id="feGaussianBlur1589" />
</filter>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter1591"
x="-0.00547063"
width="1.0109413"
y="-0.043540705"
height="1.0870814">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.05014874"
id="feGaussianBlur1593" />
</filter>
<marker
style="overflow:visible"
id="Arrow1Lend-5"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#775905;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1063-9" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend-59"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1063-6" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.95936913"
inkscape:cx="621.92838"
inkscape:cy="286.12663"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:lockguides="false"
inkscape:snap-global="false"
inkscape:snap-page="true"
inkscape:window-width="1375"
inkscape:window-height="768"
inkscape:window-x="29"
inkscape:window-y="36"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#cac9e2;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="M 0,0 V 264.58333 H 264.58333 V 0 Z"
id="path1438-7"
sodipodi:nodetypes="ccccc" />
<g
id="g2254">
<path
id="path1438-7-6"
style="fill:#d7d6e9;fill-opacity:1;stroke:#ffffff;stroke-width:0.95468;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 166.0681,257.03822 -46.21959,-15.0051 -11.07809,15.0051 z" />
<path
id="path2210"
style="fill:#d7d6e9;fill-opacity:1;stroke:#ffffff;stroke-width:0.677351;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 168.46772,237.72786 -6.25225,-14.33411 16.97509,-43.07724 H 161.388 l -8.5089,-34.5757 -11.8643,8.74482 -20.56641,-16.10212 -2.01582,6.73179 -19.631126,-4.34843 v 7.44516 l -20.422547,10.59053 6.188544,3.61861 -13.775112,14.48639 11.604922,5.47903 -9.502988,26.92926 14.1759,-3.18317 12.05016,31.59518 h 13.409327 l 7.85994,-10.64618 32.79298,10.64618 z" />
<path
id="path2208"
style="fill:#d7d6e9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 264.58333,128.803 -15.49518,8.93692 15.49518,11.56209 z" />
<path
id="path2206"
style="fill:#d7d6e9;fill-opacity:1;stroke:#ffffff;stroke-width:0.903622;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 246.95999,113.44135 -53.99549,-23.369 21.71083,-24.33234 -109.67997,-1.909864 8.11482,-26.048883 -68.239624,31.731782 1.36399,-24.440206 c 0,0 -2.685982,3.302452 -6.724221,8.340835 -4.038238,5.038384 -9.428806,11.812724 -14.83858,18.756839 -2.704887,3.472057 -5.414366,6.98671 -7.962131,10.347828 -2.547765,3.36112 -4.93355,6.568854 -6.9908547,9.42745 -0.672227,0.934051 -1.245903,1.762312 -1.842156,2.614975 V 255.9145 H 88.21703 L 72.141474,213.76485 53.23007,218.01138 65.907561,182.0863 50.425977,174.77698 68.80271,155.45138 60.546862,150.62395 87.791629,136.49562 v -9.93224 l 26.188971,5.80104 2.68921,-8.98057 27.43669,21.48108 15.8276,-11.66605 11.35133,46.12582 H 195.035 l -22.64568,57.46734 8.34083,19.12246 h 66.22984 V 151.74372 l -14.00179,-10.44776 14.00179,-8.0756 z" />
<path
id="path2204"
style="fill:#d7d6e9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 0,1.259365e-5 V 86.020083 c 0.65984815,-0.943605 1.2947103,-1.860206 2.0386352,-2.89388 2.2767316,-3.163486 4.9169764,-6.713347 7.7364785,-10.432955 2.8195023,-3.719605 5.8179663,-7.60912 8.8113483,-11.451497 5.986765,-7.684754 11.952275,-15.181625 16.42122,-20.757388 4.468945,-5.575763 7.441406,-9.230445 7.441406,-9.230445 l -1.509469,27.046928 75.517871,-35.116202 -8.98033,28.827181 121.37812,2.113565 -24.02644,26.927556 59.75449,25.861474 V 1.259365e-5 Z" />
</g>
<path
style="fill:#ebefe0;fill-opacity:0.78555036;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 0,1.2916667e-5 V 264.58334 H 264.58333 V 1.2916667e-5 Z"
id="path1438-7-7"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.158496;stroke-opacity:1;"
x="16.154453"
y="19.143269"
id="text835"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
id="tspan833"
x="16.154453"
y="19.143269"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.158496;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;">AX - </tspan><tspan
sodipodi:role="line"
x="16.154453"
y="27.068106"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.158496;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan837">BX - </tspan><tspan
sodipodi:role="line"
x="16.154453"
y="34.992943"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.158496;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan839">CX - </tspan><tspan
sodipodi:role="line"
x="16.154453"
y="42.917782"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.158496;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan841">DX - </tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.158496;stroke-opacity:1;"
x="-24.372194"
y="-6.392415"
id="text835-8"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
x="-24.372194"
y="-6.392415"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.158496;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan841-2">Text Template</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.158496;stroke-opacity:1;"
x="14.462727"
y="79.992447"
id="text835-8-2"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
x="14.462727"
y="79.992447"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.33987px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.158496;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan841-2-2">Pointer Correction Mechanism</tspan></text>
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';stroke-width:0.264583;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
x="25.857334"
y="92.007896"
id="text914"><tspan
sodipodi:role="line"
id="tspan912"
x="25.857334"
y="92.007896"
style="stroke-width:0.264583;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"></tspan></text>
<text
xml:space="preserve"
style="font-size:6.33987px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';stroke-width:0.264583;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
x="42.553078"
y="62.551476"
id="text956"><tspan
sodipodi:role="line"
id="tspan954"
x="42.553078"
y="62.551476"
style="stroke-width:0.264583;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"></tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0827665;stroke-opacity:1;"
x="139.01637"
y="7.4506211"
id="text835-8-2-6"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
x="139.01637"
y="7.4506211"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan841-2-2-1">Operational Data Reference</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="11.588972"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1020"></tspan><tspan
sodipodi:role="line"
x="139.01637"
y="15.727324"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1022"> Bytes Description</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="19.865667"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1024"> 2 Pointer DB Start</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="24.004019"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1026"> 2 Pointer DB End</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="28.14237"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1028"> 2 Pointer DB Position</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="32.280724"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1030"> 1 Pointer Type</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="36.419075"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1032"> 2 Pointer Data</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="40.557419"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1034"></tspan><tspan
sodipodi:role="line"
x="139.01637"
y="44.695778"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1036"> 2 Range DB Start</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="48.834114"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1038"> 2 Range DB End</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="52.972466"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1040"> 2 Range DB Poisition</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="57.110817"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1042"> 1 Range Type</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="61.249168"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1044"> 2 Range Start</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="65.38752"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1046"> 2 Range End</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="69.525871"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1048"></tspan><tspan
sodipodi:role="line"
x="139.01637"
y="73.664223"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1050"> 2 Displacement Start</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="77.802574"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1052"> 2 Displacement End</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="81.940926"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1054"> 2 Displacement Value</tspan><tspan
sodipodi:role="line"
x="139.01637"
y="86.079277"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.31068px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.0827665;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
id="tspan1056" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.356px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0838996;stroke-opacity:1"
x="18.493484"
y="109.32951"
id="text835-0"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
x="18.493484"
y="109.32951"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.356px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0838996;stroke-opacity:1"
id="tspan841-9">X</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.356px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0838996;stroke-opacity:1"
x="10.42958"
y="100.94665"
id="text835-0-4"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
x="10.42958"
y="100.94665"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.356px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0838996;stroke-opacity:1"
id="tspan841-9-9">Pointer Limit Check</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -33.283516,16.292564 0,35.929956 h 17.65181 l 0,-35.929956 z"
id="path1438"
sodipodi:nodetypes="ccccc" />
<path
id="path1454"
style="fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.16997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter1587)"
d="m 5.966346,2.4561808 -1.679786,1.2568517 0.065731,1.3906371 0.3339653,0.00531 0.00133,-0.2818455 0.3645068,0.028218 0.016484,0.2510339 2.2880766,0.029485 L 7.2793448,6.2198873 6.8524903,6.8966181 6.1832443,7.0669078 6.3628436,6.5171232 7.0356328,5.6295157 6.1891002,6.0501261 6.0436958,5.4983862 5.3027311,6.4843475 H 4.6928956 L 5.3259691,7.5045022 4.7456794,7.9682692 5.8627702,8.3158454 5.9278371,9.0309165 7.2557312,8.0067781 7.558823,8.5774406 8.5809695,7.3478107 9.1430008,7.5144614 9.0218304,5.2411067 9.6007922,4.9496339 7.9339531,3.5812391 8.2908247,3.0361385 5.8382042,3.0842748 Z M 6.1373125,3.6997535 V 4.6478699 H 5.7933878 V 3.7306271 Z"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccc" />
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.07278px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Bold Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.16997;filter:url(#filter1591);stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;"
x="10.109465"
y="7.1266541"
id="text1461"><tspan
sodipodi:role="line"
id="tspan1459"
x="10.109465"
y="7.1266541"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.07278px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Bold Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.16997;stroke:none;stroke-opacity:1;fill:#655b41;fill-opacity:1;">PROTOTYPE</tspan></text>
<path
id="path2105"
style="fill:none;fill-opacity:1;stroke:#c2c1de;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -330.93583,-100.13071 -75.51787,35.116205 1.50947,-27.046928 c 0,0 -47.55605,58.473188 -48.2322,64.482884 l -8.2703,-9.792684 -14.65285,56.620316 -27.82621,-7.687386 12.90516,120.131173 -26.42061,30.8813 118.83409,48.35829 4.08709,45.59052 131.39146,-31.81874 38.97178,25.80153 47.82396,-65.80942 43.58029,2.1213 -30.59764,-107.037894 41.74578,-8.121985 -76.70074,-57.233198 37.17654,-21.4421029 -81.43585,-35.2448751 24.02644,-26.927556 -121.37812,-2.113566 z m 3.93929,94.7327211 30.36301,23.7721909 17.51572,-12.9103229 12.56203,51.0454609 h 26.28263 l -25.061,63.59664 12.95269,29.69638 -74.7019,-24.25176 -24.65741,33.39746 -24.53338,-64.325285 -20.92844,4.699455 14.02964,-39.756746 -17.13281,-8.08891 20.33674,-21.386808 -9.13639,-5.34231 30.15062,-15.6352215 V -1.8793428 l 28.98221,6.4197652 z" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.356px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0838996;stroke-opacity:1"
x="36.368095"
y="109.32951"
id="text835-0-8"
transform="scale(1.1002022,0.90892384)"><tspan
sodipodi:role="line"
x="36.368095"
y="109.32951"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.356px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#655b41;fill-opacity:1;stroke:none;stroke-width:0.0838996;stroke-opacity:1"
id="tspan841-9-2">O</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1 @@
b40e803e127c1f7c14803e127c2a7f0d8a061f7ccd108006127c01ebe5ebfe48656c6c6f20576f726c6421

Binary file not shown.

Binary file not shown.

BIN
80286/BIOS/Unsorted/raw.bin Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,134 @@
-- we can read Lua syntax here!
return {
["kopt_auto_straighten"] = 0,
["toc_ticks_ignored_levels"] = {},
["disable_fuzzy_search"] = false,
["show_overlap_enable"] = false,
["stats"] = {
["md5"] = "f1d0c15e93f4f75173999fec567c85ec",
["notes"] = 0,
["language"] = "N/A",
["authors"] = "N/A",
["series"] = "N/A",
["highlights"] = 0,
["title"] = "210498-005_80286_and_80287_Programmers_Reference_Manual_1987",
["pages"] = 513,
},
["kopt_font_size"] = 1,
["readermenu_tab_index"] = 1,
["doc_pages"] = 513,
["kopt_page_margin"] = 0.1,
["kopt_zoom_overlap_h"] = 36,
["page_overlap_style"] = "dim",
["kopt_zoom_range_number"] = 2,
["percent_finished"] = 0.51267056530214,
["zoom_overlap_h"] = 40,
["kopt_page_gap_height"] = 8,
["kopt_full_screen"] = 1,
["kopt_line_spacing"] = 1.2,
["kopt_text_wrap"] = 0,
["kopt_justification"] = 3,
["zoom_overlap_v"] = 40,
["kopt_font_fine_tune"] = 0.05,
["kopt_word_spacing"] = -0.2,
["partial_md5_checksum"] = "f1d0c15e93f4f75173999fec567c85ec",
["kopt_contrast"] = 1,
["kopt_page_opt"] = 0,
["kopt_hw_dithering"] = 0,
["kopt_sw_dithering"] = 0,
["kopt_quality"] = 1,
["kopt_doc_language"] = "eng",
["kopt_forced_ocr"] = 0,
["kopt_writing_direction"] = 0,
["kopt_defect_size"] = 1,
["highlight"] = {},
["kopt_rotation_mode"] = 0,
["flipping_zoom_mode"] = "page",
["flipping_scroll_mode"] = false,
["kopt_zoom_mode_genus"] = 4,
["kopt_zoom_overlap_v"] = 36,
["kopt_zoom_mode_type"] = 1,
["highlight_drawer"] = "lighten",
["kopt_zoom_factor"] = 1.5,
["kopt_detect_indent"] = 1,
["zoom_mode"] = "pagewidth",
["render_mode"] = 0,
["kopt_page_scroll"] = 1,
["kopt_trim_page"] = 1,
["panel_zoom_enabled"] = false,
["preferred_dictionaries"] = {},
["bookmarks_sorted"] = true,
["bookmarks_sorted_20220106"] = true,
["rotation_mode"] = 0,
["highlights_imported"] = true,
["bookmarks"] = {},
["config_panel_index"] = 1,
["gamma"] = 1,
["normal_zoom_mode"] = "pagewidth",
["bbox"] = {},
["page_positions"] = {
[1] = 0.14947683109118,
[2] = 0.67151767151767,
[4] = 0.14067914067914,
[5] = 0.62023562023562,
[7] = 0.089397089397089,
[8] = 0.56895356895357,
[10] = 0.038115038115038,
[11] = 0.51767151767152,
[13] = 0,
[235] = 0.42827442827443,
[244] = 0.27442827442827,
[245] = 0.75398475398475,
[247] = 0.22314622314622,
[241] = 0.32571032571033,
[242] = 0.80526680526681,
[221] = 0,
[253] = 0.12058212058212,
[505] = 0.8953568953569,
[254] = 0.6001386001386,
[507] = 0.36451836451836,
[222] = 0.47955647955648,
[248] = 0.7027027027027,
[511] = 0.79279279279279,
[510] = 0.31323631323631,
[512] = 0,
[250] = 0.17186417186417,
[251] = 0.65142065142065,
[229] = 0.85654885654886,
[228] = 0.37699237699238,
[231] = 0,
[256] = 0.069300069300069,
[257] = 0.54885654885655,
[259] = 0.018018018018018,
[260] = 0.4975744975745,
[262] = 0,
[226] = 0.90783090783091,
[236] = 0.90783090783091,
[225] = 0.42827442827443,
[239] = 0.85654885654886,
[508] = 0.84407484407484,
[238] = 0.37699237699238,
[513] = 0,
[233] = 0.95911295911296,
[223] = 0.95911295911296,
[232] = 0.47955647955648,
},
["last_page"] = 262,
["kopt_max_columns"] = 2,
["inverse_reading_order"] = false,
["doc_props"] = {
["author"] = "",
["subject"] = "",
["description"] = "",
["keywords"] = "",
["title"] = "210498-005_80286_and_80287_Programmers_Reference_Manual_1987",
["creator"] = "",
["producer"] = "Adobe Acrobat 9.0 Paper Capture Plug-in",
["language"] = "",
["creationDate"] = "D:20170815134559-08'00'",
["series"] = "",
["modDate"] = "D:20170815141443-07'00'",
["authors"] = "",
},
["kopt_zoom_direction"] = 7,
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,102 @@
Using This Table
When you use an opcode, and it uses a byte from this table, it will always do an A to B or B to A operation.
A is on the top.
It is selected by the column.
B is on the right side.
It is selected by the row.
A and B are separated into four sections (§).
The opcode will tell you whether it is modifying
- A to B, or
- B to A.
It might also
- only use B.
In that case,
- ignore the contents of A.
It will provide you with an explicit source.
It will also tell you whether A is a
- Byte,
- Word, or
- Segment.
It will also tell you if B points to a
- Byte, or a
- Word.
The purpose of the table is to tell you where data is coming from and going to, based on the byte you select and the opcode used.
All you need to know is:
whether the data is a byte or word,
and from what to where.
TABLE B-1 REVISED (B-1r)
A § 1
AL CL DL BL AH CH DH BH Byte Byte to/from B
AX CX DX BX SP BP SI DI Word Word to/from B
ES CS SS DS -- -- -- -- Segment Word to/from B
__________________________
0 1 2 3
0 8 0 8 0 8 0 8
00 08 10 18 20 28 30 38 | Mem: BX+SI |
01 09 11 19 21 29 31 39 | Mem: BX+DI |
02 0A 12 1A 22 2A 32 3A | Mem: BP+SI |
03 0B 13 1B 23 2B 33 3B | Mem: BP+DI | B § 1
04 0C 14 1C 24 2C 34 3C | Mem: SI |
05 0D 15 1D 25 2D 35 3D | Mem: DI |
06 0E 16 1E 26 2E 36 3E | Mem: inline word |
07 0F 17 1F 27 2F 37 3F | Mem: BX |
7 F 7 F 7 F 7 F
A § 2
4 5 6 7
0 8 0 8 0 8 0 8
40 48 50 58 60 68 70 78 | Mem: B § 1+inline signed byte |
41 49 51 59 61 69 71 79 | |
42 4A 52 5A 62 6A 72 7A | |
43 4B 53 5B 63 6B 73 7B | | B § 2
44 4C 54 5C 64 6C 74 7C | ... |
45 4D 55 5D 65 6D 75 7D | |
46 4E 56 5E 66 6E 76 7E | Mem: BP + inline signed byte |
47 4F 57 5F 67 6F 77 7F | |
7 F 7 F 7 F 7 F
A § 3
8 9 A B
0 8 0 8 0 8 0 8
80 88 90 18 A0 A8 B0 B8 | Mem: B § 1+inline signed word |
81 89 91 19 A1 A9 B1 B9 | |
82 8A 92 1A A2 AA B2 BA | |
83 8B 93 1B A3 AB B3 BB | |
84 8C 94 1C A4 AC B4 BC | | B § 3
85 8D 95 1D A5 AD B5 BD | ... |
86 8E 96 1E A6 AE B6 BE | Mem: B § 2+inline signed word |
87 8F 97 1F A7 AF B7 BF | |
7 F 7 F 7 F 7 F
A § 4
C D E F Byte Word
0 8 0 8 0 8 0 8
C0 C8 D0 D8 E0 E8 F0 F8 | AL AX |
C1 C9 D1 D9 E1 E9 F1 F9 | CL CX |
C2 CA D2 DA E2 EA F2 FA | DL DX |
C3 CB D3 DB E3 EB F3 FB | BL BX |
C4 CC D4 DC E4 EC F4 FC | AH SP | B § 4
C5 CD D5 DD E5 ED F5 FD | CH BP |
C6 CE D6 DE E6 EE F6 FE | DH SI |
C7 CF D7 DF E7 EF F7 FF | BH DI |
7 F 7 F 7 F 7 F

View File

@ -0,0 +1,5 @@
So, with these references, what you want is to print the Appendix B of the 80286 Programming Manual, and also print out the HTML file for additional quick reference.
The tables at the start of Appendix B are super useful, you probably want to print them loose and stick them up on your wall or something similar.
A BIOS interrupt reference has been included. Happy BIOS hacking!
It's also likely I'll put the Linux Syscall table here, too, at some point.

27282
80286/References/coder32.html Normal file

File diff suppressed because one or more lines are too long

BIN
80286/References/old.img Normal file

Binary file not shown.

Binary file not shown.

11
README.md Normal file
View File

@ -0,0 +1,11 @@
# Opcode Projects
This is my humble directory of opcode projects.
The 80286 project folders are named after the prototype letter designators and a number.
The number 0 designates the main program, and numbers afterward are tests or necessary components to that program.
Prototype A is just a simple injector and a couple basic BIOS capability tests.
Prototype B is a hex editor, with a couple test functions to debug some weird segmentation issues. Turned out to be bad DS values from sloppy BIOSes.
Prototype C, what I'm working on right now, is an advanced editor and debugger that is started from a full-on program loader.