NAME=BIOS file [64k] analysis
FILE=bins/firmware/bios_64k.bin
CMDS=<<EOF
ie
echo ---
pi 1
echo ---
s $j
% $$
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
---
int32   1048490
uint32  1048490
hex     0xfffaa
octal   03777652
unit    1023.9K
segment f000:0faa
string  "\xaa\xff\x0f"
fvalue  1048490.0
float   1048490.000000f
double  1048490.000000
binary  0b000011111111111110101010
trits   0t1222021020222
EOF
RUN

NAME=BIOS file [128k] analysis
FILE=bins/firmware/bios_128k.bin
CMDS=<<EOF
ie
echo ---
pi 1
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
EOF
RUN

NAME=BIOS file [256k] analysis
FILE=bins/firmware/bios_256k.bin
CMDS=<<EOF
ie
echo ---
pi 1
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
EOF
RUN

NAME=BIOS file [512k] analysis
FILE=bins/firmware/bios_512k.bin
CMDS=<<EOF
ie
echo ---
pi 1
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
EOF
RUN

NAME=BIOS file [1M] analysis
FILE=bins/firmware/bios_1M.bin
CMDS=<<EOF
ie
echo ---
pi 1
echo ---
e asm.cpu=generic
e asm.platform=generic
aa
fl @F:platform.ports
CCl~reg
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
---
0x00000018 1 PS_2_register
0x0000001a 1 PS_2_execute
0x0000001f 1 DMA_1
0x00000020 1 PIC_1
0x00000022 1 Cx486SLC_DLC
0x00000038 1 Cozet_PC
0x00000040 1 PIT
0x00000060 1 PS_2_8042
0x00000065 1 AT_T_Chip_Select
0x0000006b 1 SSGA
0x00000070 1 CMOS_RTC
0x00000080 1 DMA_Page
0x00000090 1 PS_2_POS
0x000000a0 1 PIC_2
0x000000c0 1 DMA_2
0x000000f0 1 PCjr
0x00000170 1 HDC_2
0x000001f0 1 HDC_1
0x00000200 1 Game_port
0x00000278 1 Parallel_port
0x000002e0 1 GPIAB
0x000002e8 1 Serial_port
0x00000330 1 MIDI
0x00000340 1 SCSI
0x00000360 1 NS3249C_card
0x00000370 1 FDC_2
0x000003a0 1 SDLC_2
0x000003b0 1 MDA
0x000003c0 1 EGA
0x000003d0 1 CGA
0x000003f0 1 FDC_1
0x00000018 CCu "PS/2 extended function register"
0x00000022 CCu "Cyrix Cx486SLC/DLC processor Cache Configuration Registers (0022-0023)"
0x0000006b CCu "SSGA control registers (006B-006F)"
0x00000080 CCu "DMA page registers (0080-008F)"
EOF
RUN

NAME=BIOS file [2M] analysis
FILE=bins/firmware/bios_2M.bin
CMDS=<<EOF
ie
echo ---
pi 1
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
EOF
RUN

NAME=BIOS file [4M] analysis
FILE=bins/firmware/bios_4M.bin
CMDS=<<EOF
ie
echo ---
pi 1
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
EOF
RUN

NAME=BIOS file [8M] analysis
FILE=bins/firmware/bios_8M.bin
CMDS=<<EOF
ie
echo ---
pi 1
EOF
EXPECT=<<EOF
     vaddr      paddr     hvaddr      haddr type    
----------------------------------------------------
0x000ffff0 0x00000000 ---------- ---------- program
---
jmp far 0xf000:0xffaa
EOF
RUN

NAME=GNS1: comprehensive validation
FILE=bins/firmware/gns1_test.bin
CMDS=<<EOF
iI~bintype
iI~arch
iI~cpu
iI~baddr
iI~bits
iI~endian
iI~machine
iI~^os
iI~^va
ie~program
ie~0x10000000
iS~region?
iS~region
iS~region_a_text
iS~region_b_text
iS~0x12
iS~0x15
iH~num_segments
iH~base
iI~binsz
pd 1 @ 0x10000000
EOF
EXPECT=<<EOF
bintype  firmware
arch     arc
cpu      ARC700
baddr    0x10000000
bits     16
endian   LE
machine  Apple C4000 Baseband
os       N/A
va       true
0x10000000 0x00000064 ---------- ---------- program
0x10000000 0x0000007c ---------- ---------- program
0x10000000 0x00000064 ---------- ---------- program
0x10000000 0x0000007c ---------- ---------- program
4
0x00000064 0x10 0x10000000  0x10   0x0 -r-x region_a_text_0      
0x00000074  0x8 0x10001000   0x8   0x0 -rw- region_a_data_1      
0x0000007c 0x10 0x10000000  0x10   0x0 -r-x region_b_text_2      
0x0000008c  0x8 0x10001000   0x8   0x0 -rw- region_b_data_3      
0x00000064 0x10 0x10000000  0x10   0x0 -r-x region_a_text_0      
0x0000007c 0x10 0x10000000  0x10   0x0 -r-x region_b_text_2      
num_segments: 4
region_a_base: 0x12000000
region_b_base: 0x15000000
internal_base: 0x10000000
binsz    0x00000094
            ;-- entry0:
            ;-- entry1:
            ;-- section.region_a_text_0:
            ;-- section.region_b_text_2:
            0x10000000      mov   r22, 25                              ; [02] -r-x section size 16 named region_b_text_2
EOF
RUN

NAME=GNS1: reject file too small
FILE=bins/firmware/gns1_invalid_small.bin
CMDS=iI~bintype
EXPECT=<<EOF
bintype  N/A
EOF
RUN

NAME=GNS1: reject invalid offset
FILE=bins/firmware/gns1_invalid_offset.bin
CMDS=iI~bintype
EXPECT=<<EOF
bintype  N/A
EOF
RUN

NAME=GNS1: reject segment overflow
FILE=bins/firmware/gns1_invalid_overflow.bin
CMDS=iI~bintype
EXPECT=<<EOF
bintype  N/A
EOF
RUN
