Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Another World Opcode List
- 00 FF 00 04 00 F6 00 01 00 E3 00 00 00 32 00 00 06
- <bh:00><bh:ff><bh:00><bh:04><bh:00><bh:f6><bh:00><bh:01><bh:00><bh:e3><bh:00><bh:00><bh:00>2<bh:00><bh:00><bh:06>
- 3f9fd
- Set.i Vn, Imm16
- 00 DD NNNN
- Set Vd, Vs
- 01 DD SS
- Add Vd, Vs
- 02 DD SS
- Add.i Vn, Imm16
- 03 DD NNNN
- Jsr Address
- 04 AAAA
- return
- 05
- break
- 06
- Jmp Address
- 07 AAAA
- SetVec Nb, Address
- 08 VV AAAA
- dbra Vn, Address
- 09 VV AAAA
- Si(Vn,Vn):
- Si Vn = Vn Jmp Address
- 0A 80 VV WW AAAA
- Si Vn <> Vn Jmp Address
- 0A 81 VV WW AAAA
- Si Vn > Vn Jmp Address
- 0A 82 VV WW AAAA
- Si Vn => Vn Jmp Address
- 0A 83 VV WW AAAA
- Si Vn < Vn Jmp Address
- 0A 84 VV WW AAAA
- Si Vn <= Vn Jmp Address
- 0A 85 VV WW AAAA
- Si(Vn,Imm8):
- Si Vn = Imm8 Jmp Address
- 0A 00 VV WW AAAA
- Si Vn <> Imm8 Jmp Address
- 0A 01 VV WW AAAA
- Si Vn > Imm8 Jmp Address
- 0A 02 VV WW AAAA
- Si Vn => Imm8 Jmp Address
- 0A 03 VV WW AAAA
- Si Vn < Imm8 Jmp Address
- 0A 04 VV WW AAAA
- Si Vn <= Imm8 Jmp Address
- 0A 05 VV WW AAAA
- Si(Vn,Imm16):
- Si Vn = Imm16 Jmp Address
- 0A 40 VV WWWW AAAA
- Si Vn <> Imm16 Jmp Address
- 0A 41 VV WWWW AAAA
- Si Vn > Imm16 Jmp Address
- 0A 42 VV WWWW AAAA
- Si Vn => Imm16 Jmp Address
- 0A 43 VV WWWW AAAA
- Si Vn < Imm16 Jmp Address
- 0A 44 VV WWWW AAAA
- Si Vn <= Imm16 Jmp Address
- 0A 45 VV WWWW AAAA
- Fade PalNb
- 0B NN 00?
- Vec Start, End, Unlock
- 0C SS EE 00
- Vec Start, End, Lock
- 0C SS EE 01
- Vec Start, End, Clean
- 0C SS EE 02
- SetWS Nb
- 0D NN
- Clr Nb, Color
- 0E NN 0C
- Copy Ss Sd
- 0F SS DD
- Show NN
- 10 NN
- Bigend
- 11
- Text TxtNb, X, Y, Color
- 12 TTTT XX YY 0C
- Sub Vd, Vs
- 13 DD SS
- And.i Vn,Imm16
- 14 VV IIII
- Or.i Vn,Imm16
- 15 VV IIII
- Lsl Vn, Imm16
- 16 VV IIII
- Lsr Vn, Imm16
- 17 VV IIII
- Play FileNb, Note, Volume, Channel
- 18 FFFF NN VV CC
- Load FileNb
- 19 FFFF
- Song FileNb, Tempo, Position
- 1A FFFF TTTT PP
- Spr.s Addr, X, Y
- (80 || AA) AA XX YY
- Spr.l Addr, X, Y, (Z)
- 01XXYYZZb AAAA (XX)XX (YY)YY (ZZZZ)
- 0=00=Imm16
- 1=01=Variable
- 2=10=Imm8
- 3=11=No Z or X||100
- Spr.l Addr, X16, Y16, Z16
- 40 AAAA XXXX YYYY ZZZZ
- Spr.l Addr, X8, Y8, Z8
- 6B AAAA XX YY ZZ
- Spr.l Addr, VX, VY, VX
- 55 AAAA VX VY VX
- Polygon Format:
- [C0||Color] LL HH PP
- XX YY [...*PP]
- GM Format:
- 02 RX RY NN
- CHHHHHHHb HH RX RY (MCCCCCCCb MM)
- Screen Buffers:
- 0=Plain Color
- 1=Double Buffer
- 2=Double Buffer
- 3=Background
- 254=Visible Screen
- 255=Invisible Screen
- Palette Format:
- 0000RRRRGGGGBBBBb
- Compression:
- Backwards.
- [18:51] <@Seru-kun> https://github.com/fabiensanglard/Another-World-Bytecode-Interpreter/blob/master/bank.cpp
- [18:56] <@hcs> wow, yeah, that's pretty hard to read
- [18:57] <@hcs> but it looks like the whole getCode, nextChunk, rcr thing is just pulling off bits
- [18:58] <@hcs> everything is run backwards, for whatever reason
- [18:59] <@hcs> storage mode is indicated by two or three bit prefixes, these are what the ifs starting at 93 do
- [19:01] <@hcs> 00 is a string of literal bytes, the next three bits give the number-1, (that's the meaning of decUnk(8,0)
- [19:01] <@hcs> er, decUnk1(3,0)
- [19:02] <@hcs> decUnk2 looks like LZ77, with decUnk2(8) (prefix 01) you have a 8 bit backreference length
- [19:03] <@hcs> backref distance, rather
- [19:04] <@hcs> prefix 01 only does 2 bytes, but it can be 1 to 256 bytes back
- [19:05] <@hcs> notice how line 77 adds i, the backref distance, whereas most processing is done with decrements, so we're reaching back in the already decompressed data
- [19:06] <@hcs> The other prefixes are just different variations on the same theme, 111 is literals, 8 bit length + 8 + 1 (the second arg in decUnk1(8, 8) indicates an additional to the count)
- [19:06] <@hcs> *an addition
- [19:07] <@hcs> this nicely complements the decUnk1(3,0), which can give you up to 8, decUnk1(8,8) can give you from 9 to 255+9
- [19:08] <@hcs> 110 is followed by an 8 bit backreference length (-1) with is used by decUnk(12), so there's also a 12 bit backreference distance
- [19:09] <@hcs> 100 and 101 have a fixed length (3 and 4 respectively) and 9 or 10 bit backreference dists
- Source Codes:
- code0:
- start jsr init
- setvec 60 flip10
- seti v255 4
- seti v246 1
- seti v227 0
- seti v50 0
- break
- play 106 20 0 2
- play 106 20 0 3
- play 106 20 0 1
- play 106 20 0 0
- jsr initiz
- jsr setmar
- jsr inic
- jsr mun1
- setvec 20 nag1
- setvec 21 nag2
- setvec 20 mard1a
- seti v99 2
- si v4 = 48 suit
- code1:
- snes1 setvec 1 fdera1
- zic01 song 4025 0 1
- setvec 2 derape
- setvec 3 plan1
- setvec 60 flip10
- bigend
- stopv bigend
- flip1 addi v199 1
- show 255
- setws 255
- si v250 <> 0 exit
- copy 64 255
- break
- jmp flip1
- flip10 addi v199 1
- show 255
- setws 255
- copy 0 255
- break
- addi v199 1
- code2:
- room draw.s screen 228 85
- draw.s lester 110 101
- draw.s lines 160 100
- draw.s light 136 35
- color 17 255
- bigend
- code3:
- step draw.s shoe1 229 98
- break
- draw.s shoe3 230 97
- break
- draw.s shoe5 230 97
- break
- draw.s shoe7 230 98
- break
- draw.s shoe9 229 97
- break
- draw.s shoe11 229 97
- sound 60 20 63 0
- break
- draw.s shoe13 230 97
- break
- draw.s shoe15 229 98
- break
- draw.s shoe17 230 97
- break
- draw.s shoe19 231 98
- code4:
- load 45
- jmp snes1
- load 137
- load 2
- load 129
- load 3
- snes1 play 48 0 0 0
- play 48 0 0 1
- play 48 0 0 2
- play 48 0 0 3
- setvec 60 flip1
- seti v12 0
- seti v4 0
- seti v254 0
- seti v1 0
- seti v255 7
- break
- jsr prot1
- si v0 = 12 dessus
- si v0 > 12 start3
- code5:
- fpis spr.s pis24 160 100
- spr.s pis1 160 100
- spr.s pis25 160 100
- spr.s pis11 160 100
- spr.s pis10 160 100
- spr.s pis2 160 100
- spr.s pis3 160 100
- spr.s pis7 160 100
- spr.s pis8 160 100
- spr.s pis9 160 100
- spr.s pis12 160 100
- spr.s pis13 160 100
- spr.s pis17 160 100
- spr.s pis18 160 100
- spr.s pis19 160 100
- spr.s pis20 160 100
- spr.s pis21 160 100
- spr.s pis26 160 100
- return
- bigend
- code6:
- start jsr init
- zic01 song 4001 0 3
- seti v227 0
- si v219 = 0 snes2
- load 2002
- jmp snes1
- snes2 load 48
- load 50
- load 57
- load 62
- load 16
- load 8
- load 81
- load 49
- load 50
- load 53
- load 57
- load 58
- code7:
- start jsr init
- seti v227 0
- seti v255 4
- seti v246 1
- seti v50 0
- seti v182 0
- seti v10 0
- seti v239 0
- si v191 = 1 hard
- seti v239 105
- hard jsr son1
- play 85 20 0 1
- play 85 20 0 2
- play 85 20 0 3
- play 85 20 0 0
- si v0 = 24 start2
- si v0 = 26 start3
- setvec 60 flip10
- ???
- jsr snes3
- code8:
- desa setvec 34 desa2
- setvec 35 desa1
- setvec 20 joy2
- setvec 21 bal4
- setvec 0 first1
- seti v0 21
- jsr snes4
- jsr fond1
- bigend
- prot1 return
- set v248 v188
- andi v248 16
- return
- si v248 = 0 prot1a
- si v242 <> 4000 prot1a
- return
- prot1a vec 0 63 2
- setvec 60 stopv
- bigend
- dead1 break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement