Programs for Tunguska

Balanced Ternary Numeral System - forum was moved from http://ternary.info

Moderator: haqreu

Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Programs for Tunguska

Post by Mac Buster »

I decided to create special topic for Tunguska programs source codes since every post can be very big.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Programs for Tunguska

Post by Mac Buster »

Here is another version of my colour test table. This one shows 729 colours as blocks of 8 x 8 pixels of same colour in 27 x 27 blocks matrix 8-)

Here is how does it look on the screen:

Image

Here is source code:

Code: Select all

; Color table 3 for Tunguska, works in raster mode (729 colors)
;
;  Assemble into demo.ternobj
;  Run 'tunguska image.ternobj -F demo.ternobj'
;  Type 'LOADSUB'
;

@ORG    %DDD000
        ; Bootstrap function
        ;
        ; Read page 2 from disk into page 2 in memory
        LDA     #2
        LDY     #2
        JSR     (jumpvector.fl_read_block)
        JMP     colortable3

; These won't be copied. They are also present in the host at the same
; memory location. 

@ORG    %001000
jumpvector:
.getstring:   @DW     0
.feedscreen:  @DW     0
.putchar:     @DW     0
.putnon:      @DW     0
.puts:        @DW     0
.strcmp:      @DW     0
.strlen:      @DW     0
.index:       @DW     0
.strspn:      @DW     0
.strcspn:     @DW     0
.memset6:     @DW     0
.random:      @DW     0
.between:     @DW     0
.repaint:     @DW     0
.fl_read_block: @DW     0
.fl_write_block: @DW    0
.fl_dump_memory: @DW      0
.raster:      @DW         0
.putpixel:    @DW         0
.getpixel:    @DW         0

@ORG    %002000

raster:
@EQU    .width      324
@EQU    .height     243
@EQU    .mempos     %DDBDDD

colortable3:
; Enable raster mode
        LDA   #%00C
        STA   %DDDDDB
        LDA   #27
        STA   .ctx
        LDA   #27
        STA   .cty
.nxtbl: JSR   .drawblock_ex
        LDA   .x
        CLC
        ADD   #9
        STA   .x
        INC   .c
        DEC   .ctx
        LDA   .ctx
        CMP   #0
        JNE   .nxtbl
        LDA   #40
        STA   .x
        LDA   #27
        STA   .ctx
        LDA   .y
        CLC
        ADD   #9
        STA   .y
        DEC   .cty
        LDA   .cty
        CMP   #0
        JNE   .nxtbl
.idleloop:
        JMP   .idleloop

.ctx:   @DT   0
.cty:   @DT   0

.drawblock_ex:
        LDA   #8
        STA   .dblc
        LDA   .y
        STA   .orgy
        LDA   .x
        STA   .orgx
.nxtln: LDA   #8
        JSR   .drawline_ex
        INC   .orgy
        DEC   .dblc
        LDA   .dblc
        CMP   #0
        JNE   .nxtln
        RST

.dblc:  @DT   0
.dbx:   @DT   0
.dby:   @DT   0
.orgx:  @DT   0
.orgy:  @DT   0

.drawline_ex:
        STA   .dlvc
        LDA   .orgy
        STA   .dly
        LDA   .orgx
        STA   .dlx
.nxtpx: JSR   .putpixel_ex
        INC   .dlx
        DEC   .dlvc
        LDA   .dlvc
        CMP   #0
        JNE   .nxtpx
        RST

.dlvc:  @DT   0
.dly:   @DT   0
.dlx:   @DT   0

.putpixel_ex:
        LAD   raster.mempos
        STX   .mem
        STY   .mem+1
        CLC
        LDA   .dlx
        ADD   .mem+1
        STA   .mem+1
        LDA   #0
        ADD   .mem
        STA   .mem
        CLC
        LDA   #raster.width
        MLL   .dly
        ADD   .mem+1
        STA   .mem+1
        LDA   #0
        ADD   .mem
        STA   .mem
        CLC
        LDA   #raster.width
        MLH   .dly
        ADD   .mem
        STA   .mem
        LDA   .c
        STA   (.mem)
        RST

.x:     @DT   40
.y:     @DT   0
.c:     @DT   %DDD
.mem:   @DW   0

Please note: this is not optimised version, I'll update the code soon to make it slightly faster and better colours order.
eudoxie
Maniac
Posts: 277
Joined: 17 Sep 2012 13:36
Location: 81.170.128.52

Re: Programs for Tunguska

Post by eudoxie »

That's kinda neat. I'm thinking I might add an assembler macro that adds a shift between memory location and disk location, so that you can save code intended for a specific memory location (with correct jump addresses and all that) on a different disk location. This would make it possible to store many different programs on the same disk.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Programs for Tunguska

Post by Shaos »

eudoxie wrote: That's kinda neat. I'm thinking I might add an assembler macro that adds a shift between memory location and disk location, so that you can save code intended for a specific memory location (with correct jump addresses and all that) on a different disk location. This would make it possible to store many different programs on the same disk.
I think that boot program and other programs have to be separate binaries - see my approach with RBOOT.A and RTGTEST.A (see tunguska-alpha-2_2-win). Also I plan to create some kind of "program manager" as boot for disk(s)...
eudoxie
Maniac
Posts: 277
Joined: 17 Sep 2012 13:36
Location: 81.170.128.52

Re: Programs for Tunguska

Post by eudoxie »

A snow simulator.

Code: Select all

; Snow simulator (suffers from the dreaded "bars of doom" syndrome)
;
; Loaded with LOADSUB
;
;

; ---------------------------------------------------------
;
;
;
;  Code begins
;

; Memory position for vectors
;
;
vector		@EQU	%DDB000
vector.COLOR	@EQU	vector			; Offsets for color, x and y position
vector.XPOS	@EQU	vector+1
vector.YPOS	@EQU	vector+2
vector.LENGTH	@EQU	vector+3 - vector	; Length of a vector in memory

@ORG	%DDD000
	; Bootstrap function
	;
	; Read page 2 from disk into page 2 in memory
	LDA	#2
	LDY	#2
	JSR	(jumpvector.fl_read_block)
        ; ... and page 3
	LDA	#3
	LDY	#3
	JSR	(jumpvector.fl_read_block)

	JMP	snow

; These won't be copied. They are also present in the host at the same
; memory location. 

@ORG	%001000
jumpvector:
.getstring:	@DW	0
.feedvector:	@DW	0
.putchar:	@DW	0
.putnon:	@DW	0
.puts:		@DW	0
.strcmp:	@DW	0
.strlen:	@DW	0
.index:		@DW	0
.strspn:	@DW	0
.strcspn:	@DW	0
.memset6:	@DW	0
.random:	@DW	0
.between:	@DW	0
.repaint:	@DW	0
.fl_read_block: @DW	0
.fl_write_block: @DW	0
.mouse.x       : @DW	0
.mouse.y       : @DW	0


@ORG	%002000

snow:
		LDA	#150		; Lower this value if too slow, increase if too fast
		STA	%444441
		JSR	init
		LDX	#%DDD

; Increment Y position and add random values to x position
;

.loop:
		LDA	vector.YPOS,X
		INC 	A
		STA	vector.YPOS,X
		JSR	(jumpvector.random)
		EOR	%#001
		ADD	vector.XPOS,X
		STA	vector.XPOS,X

		LDA	vector.YPOS+vector.LENGTH,X
		INC	A
		STA	vector.YPOS+vector.LENGTH,X
		LDA	vector.XPOS,X
		INC	A
		STA	vector.XPOS+vector.LENGTH,X

		LDA	vector.YPOS+2*vector.LENGTH,X
		INC	A
		STA	vector.YPOS+2*vector.LENGTH,X
		LDA	vector.XPOS,X
		STA	vector.XPOS+2*vector.LENGTH,X

		TXA
		CLC
		ADD	#9
		TAX

		JMP	.loop
	


; Initiate vectors
;
;
;

init:
		LDA	#%003
		STA	%DDDDDB
		LDX	#%DDD
.loop:
		; Vector #1
		LDA	#%DDD
		STA	vector.COLOR,X
		JSR	(jumpvector.random)
		STA	vector.XPOS,X
		JSR	(jumpvector.random)
		STA	vector.YPOS,X

		; Vector #2
		LDA	#%444
		STA	vector.COLOR+vector.LENGTH,X
		LDA	vector.XPOS,X
		INC	A
		STA	vector.XPOS+vector.LENGTH,X
		LDA	vector.YPOS,X
		STA	vector.YPOS+vector.LENGTH,X
	
		; Vector #3
		LDA	#%444
		STA	vector.COLOR+2*vector.LENGTH,X
		LDA	vector.XPOS,X
		STA	vector.XPOS+2*vector.LENGTH,X
		LDA	vector.YPOS,X
		INC	A
		STA	vector.YPOS+2*vector.LENGTH,X
	
		TXA
		CLC
		ADD	#9
		TAX
		CMP	#%DDD
		JNE	.loop


		RST

progend 	@EQU	$$
eudoxie
Maniac
Posts: 277
Joined: 17 Sep 2012 13:36
Location: 81.170.128.52

Re: Programs for Tunguska

Post by eudoxie »

Image

"Ant colony" simulator. Or multiple random walks with tracking.

Code: Select all

; Ant colony
;
; Loaded with LOADSUB
;
;

; ---------------------------------------------------------
;
;
;
;  Code begins
;

@ORG	%DDD000
	; Bootstrap function
	;
	; Read page 2 from disk into page 2 in memory
	LDA	#2
	LDY	#2
	JSR	(jumpvector.fl_read_block)
        ; ... and page 3
	LDA	#3
	LDY	#3
	JSR	(jumpvector.fl_read_block)

	JMP	ant

; These won't be copied. They are also present in the host at the same
; memory location. 

@ORG	%001000
jumpvector:
.getstring:	@DW	0
.feedvector:	@DW	0
.putchar:	@DW	0
.putnon:	@DW	0
.puts:		@DW	0
.strcmp:	@DW	0
.strlen:	@DW	0
.index:		@DW	0
.strspn:	@DW	0
.strcspn:	@DW	0
.memset6:	@DW	0
.random:	@DW	0
.between:	@DW	0
.repaint:	@DW	0
.fl_read_block: @DW	0
.fl_write_block: @DW	0
.mouse.x:	 @DW	0
.mouse.y:	@DW	0
.putpixel:	@DW	0
.getpixel:	@DW	0
.putpixel3:	@DW	0		


@ORG	%002000

@EQU	ANTS	10	; Total number of ants
ant:
		; Use AGDP to clear screen
		; 
		;
		;
		LAD	%DDBDDD
		STX	%DDDDD1
		STY	%DDDDD2
		LDA	#0
		STA	%DDDDD3
		LDA	#%DDD
		STA	%DDDDD4
		LAD	108*729
		STX	%DDDDCD
		STY	%DDDDCC
		LDA	#11
		STA	%DDDDD0

		; Enable raster729-mode
		LDA	%DDDDDB
		AND	#%44B
		STA	%DDDDDB

		LDX	#0

		; Give the ants random initial positions
		;
.init:		
		JSR	(jumpvector.random)
		PHX
		LDX	#%000
		LDY	#%400
		JSR	(jumpvector.between)
		PLX
		STA	.X,X
		JSR	(jumpvector.random)
		PHX
		LDX	#%000
		LDY	#%300
		JSR	(jumpvector.between)
		PLX
		STA	.Y,X
		
		INX
		TXA
		CMP	#ANTS
		JNE	.init	

		LDX	#0

		; Main loop
.loop:

		; Increase X position of the X:th ant
		JSR	(jumpvector.random)	; Get random value
		EOR	#%001			; Mask all but last trit
		CLC
		ADD	.X,X			; Add to X pos
		PHX
		LDX	#%000
		LDY	#%400
		JSR	(jumpvector.between)	; Impose screen clamps
		PLX
		STA	.X,X			; Store in .X[X]

		JSR	(jumpvector.random)	; Get a random value
		EOR	#%001			; mask out all but last trit
		CLC
		ADD	.Y,X			; Add to Y pos
		PHX
		LDX	#%000
		LDY	#%300
		JSR	(jumpvector.between)	; Impose clamps
		PLX
		STA	.Y,X			; Store in .Y[X]

		PHX				; Draw pixel on screen
		TXA				;
		LDY	.Y,X			;
		LDX	.X,X			;
		JSR	(jumpvector.putpixel)	; <-- here
		PLX

		INX				; Increase X until all
		TXA				; ants have been drawn,
		CMP	#ANTS			; then reset
		JNE	.notrimx
		LDX	#0
.notrimx:	
		JMP	.loop

.X:		@REST	ANTS
.Y:		@REST	ANTS		


User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Programs for Tunguska

Post by Shaos »

I tried to build "snow" using latest CVS version:

Code: Select all

* assembler.cc[223]: Unresolved variable DD
* assembler.cc[331]: Error during assembly of snow.asm, line 68
I changed #%DD to #%DDD - it's working but from time to time I see vertical and horizontal white lines across the screen along with snow
eudoxie
Maniac
Posts: 277
Joined: 17 Sep 2012 13:36
Location: 81.170.128.52

Re: Programs for Tunguska

Post by eudoxie »

Hm, I'll upate my post with the snow.asm-listing.

The bars are just lazy programming, I could test for integral overflow, but that would vastly increase the complexity (and decrease the speed) of the program...
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Some images are lost in time...
Я тут за главного - если что шлите мыло на me собака shaos точка net