clean up ppm viewer program
This commit is contained in:
parent
01679fd252
commit
09178c6d94
3 changed files with 211 additions and 0 deletions
BIN
ppm viewer/AF.dev
Normal file
BIN
ppm viewer/AF.dev
Normal file
Binary file not shown.
16
ppm viewer/README.md
Normal file
16
ppm viewer/README.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# PPM image viewer
|
||||
|
||||
Reads a ppm image from an input device (AF.dev by default)
|
||||
and displays it on SicTools builtin graphical screen.
|
||||
|
||||
To resize and convert your image you can use ffmpeg:
|
||||
```{sh}
|
||||
ffmpeg -i image.png -vf scale="64x-1" AF.ppm && mv AF.ppm AF.dev
|
||||
```
|
||||
|
||||
- Source code: ppm.asm
|
||||
- Graphical screen: 64x64 at A000
|
||||
- dimensions can be adjusted by changing their values in code
|
||||
- Frequency: any
|
||||
- Author: Jakob Jesenko, 2026
|
||||
|
||||
195
ppm viewer/ppm.asm
Normal file
195
ppm viewer/ppm.asm
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
.
|
||||
. ppm.asm - prgram for dispaying of ppm images
|
||||
.
|
||||
. notice: any overflow of graphical screen is also
|
||||
. copied to memory however only top left (64x64 pixels)
|
||||
. remain visible
|
||||
.
|
||||
. default values from Sictools:
|
||||
. - Graphical screen address: 0x00A000
|
||||
. - Columns: 64
|
||||
. - Rows: 64
|
||||
. default input device inputd: 0xAF
|
||||
.
|
||||
|
||||
|
||||
ppm START 0
|
||||
LDA #stack . setup stack
|
||||
STA sp
|
||||
CLEAR B
|
||||
hloop CLEAR A . write image metadata to stdout
|
||||
RD inputd
|
||||
WD #1
|
||||
COMP #10
|
||||
JEQ ln2
|
||||
J hloop
|
||||
ln2 CLEAR A
|
||||
RD inputd
|
||||
COMP #35 .#
|
||||
JEQ comm
|
||||
J dims1
|
||||
comm WD #1
|
||||
ln2lp CLEAR A
|
||||
RD inputd
|
||||
WD #1
|
||||
COMP #10
|
||||
JEQ dims
|
||||
J ln2lp
|
||||
dims RD inputd
|
||||
dims1 COMP #32
|
||||
JEQ dims1e
|
||||
WD #1
|
||||
SUB #48 .0
|
||||
ADDR A,B
|
||||
LDA #10
|
||||
MULR A,B
|
||||
RD inputd
|
||||
J dims1
|
||||
dims1e WD #1
|
||||
LDA #10
|
||||
DIVR A,B
|
||||
STB width
|
||||
CLEAR B
|
||||
RD inputd
|
||||
dims2 COMP #10
|
||||
JEQ dims2e
|
||||
WD #1
|
||||
SUB #48 .0
|
||||
ADDR A,B
|
||||
LDA #10
|
||||
MULR A,B
|
||||
RD inputd
|
||||
J dims2
|
||||
dims2e WD #1
|
||||
LDA #10
|
||||
DIVR A,B
|
||||
STB height
|
||||
CLEAR B
|
||||
RD inputd
|
||||
dims3 COMP #10
|
||||
JEQ dims3e
|
||||
WD #1
|
||||
SUB #48 .0
|
||||
ADDR A,B
|
||||
LDA #10
|
||||
MULR A,B
|
||||
RD inputd
|
||||
J dims3
|
||||
dims3e WD #1
|
||||
LDA #10
|
||||
DIVR A,B
|
||||
STB maxval
|
||||
CLEAR B
|
||||
|
||||
LDA width
|
||||
MUL height
|
||||
STA pixcnt
|
||||
|
||||
mainlp CLEAR A
|
||||
CLEAR B
|
||||
RD inputd . read color data for one pixel
|
||||
STCH red
|
||||
RD inputd
|
||||
STCH green
|
||||
RD inputd
|
||||
STCH blue
|
||||
JSUB intens . calculate color intensity
|
||||
LDCH clrmax
|
||||
DIV #64 . construct pixel color according to
|
||||
ADDR A,B . graphical screen specification
|
||||
SHIFTL B,2
|
||||
LDCH red
|
||||
DIV #64
|
||||
ADDR A,B
|
||||
SHIFTL B,2
|
||||
LDCH green
|
||||
DIV #64
|
||||
ADDR A,B
|
||||
SHIFTL B,2
|
||||
LDCH blue
|
||||
DIV #64
|
||||
ADDR B,A
|
||||
|
||||
STCH @pixptr . print pixel to graphical screen
|
||||
LDA pixptr . calculate next pixel position
|
||||
ADD #1
|
||||
STA pixptr
|
||||
LDA pixctr
|
||||
ADD #1
|
||||
STA pixctr
|
||||
DIV width
|
||||
MUL width
|
||||
COMP pixctr
|
||||
JEQ ptradj . reset position to first column
|
||||
adjret
|
||||
|
||||
|
||||
LDA pixctr . check if all pixels have been
|
||||
COMP pixcnt . displayed
|
||||
JEQ halt
|
||||
J mainlp
|
||||
J halt
|
||||
|
||||
ptradj LDA pixptr
|
||||
SUB width
|
||||
ADD cols
|
||||
STA pixptr
|
||||
J adjret
|
||||
|
||||
|
||||
halt J halt
|
||||
|
||||
. calculate color intensity by extracting
|
||||
. color component, that has the highest
|
||||
. value
|
||||
. this might not be the correct algorhitm,
|
||||
. but produces adequate results
|
||||
intens STA @sp . push registers
|
||||
LDA sp
|
||||
ADD #3
|
||||
STA sp
|
||||
STB @sp
|
||||
ADD #3
|
||||
STA sp
|
||||
...
|
||||
CLEAR A
|
||||
LDA red
|
||||
COMP green
|
||||
JLT swpgrn
|
||||
retgrn COMP blue
|
||||
JLT swpblu
|
||||
retblu STA clrmax
|
||||
...
|
||||
LDA sp . pop registers
|
||||
SUB #3
|
||||
STA sp
|
||||
LDB @sp
|
||||
SUB #3
|
||||
STA sp
|
||||
LDA @sp
|
||||
RSUB
|
||||
swpgrn LDA green
|
||||
J retgrn
|
||||
swpblu LDA blue
|
||||
J retblu
|
||||
|
||||
|
||||
inputd BYTE X'AF'
|
||||
width RESW 1
|
||||
height RESW 1
|
||||
maxval RESW 1
|
||||
pixcnt RESW 1
|
||||
rows WORD 64
|
||||
cols WORD 64
|
||||
pixptr WORD X'00A000'
|
||||
screen WORD X'00A000'
|
||||
pixctr WORD 0
|
||||
srtptr RESW 1
|
||||
red RESW 1
|
||||
green RESW 1
|
||||
blue RESW 1
|
||||
clrmax RESW 1
|
||||
sp RESW 1
|
||||
stack RESW 1024
|
||||
|
||||
END ppm
|
||||
Loading…
Add table
Add a link
Reference in a new issue