Clean up Assembly files (#1003)
This commit is contained in:
@@ -1,21 +1,17 @@
|
|||||||
; goodbyeworld.s for C= 8-bit machines, ca65 assembler format.
|
a_cr = $0d
|
||||||
; String printing limited to strings of 256 characters or less.
|
bsout = $ffd2
|
||||||
|
|
||||||
a_cr = $0d ; Carriage return.
|
|
||||||
bsout = $ffd2 ; KERNAL ROM, output a character to current device.
|
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
ldx #0 ; Starting index 0 in X register.
|
ldx #0
|
||||||
printnext:
|
printnext:
|
||||||
lda text,x ; Get character from string.
|
lda text,x
|
||||||
beq done ; If we read a 0 we're done.
|
beq done
|
||||||
jsr bsout ; Output character.
|
jsr bsout
|
||||||
inx ; Increment index to next character.
|
inx
|
||||||
bne printnext ; Repeat if index doesn't overflow to 0.
|
bne printnext
|
||||||
done:
|
done:
|
||||||
rts ; Return from subroutine.
|
rts
|
||||||
|
|
||||||
.rodata
|
.rodata
|
||||||
|
|
||||||
text:
|
text:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
STROUT EQU $DB3A ;OUTPUTS AY-POINTED NULL TERMINATED STRING
|
STROUT EQU $DB3A
|
||||||
LDY #>HELLO
|
LDY #>HELLO
|
||||||
LDA #<HELLO
|
LDA #<HELLO
|
||||||
JMP STROUT
|
JMP STROUT
|
||||||
|
|||||||
@@ -6,28 +6,27 @@
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
org 0
|
org 0
|
||||||
|
|
||||||
; this header required to identify ROM by Vectrex hardware (only year allowed to change)
|
|
||||||
db "g GCE 2016", $80 ; 'g' is copyright sign
|
|
||||||
dw $F600 ; music from the rom (no music)
|
|
||||||
db $FC, $30, 33, -$2a ; height, width, rel y, rel x for app title
|
|
||||||
db "HELLO WORLD", $80 ; app title, ending with $80
|
|
||||||
db 0 ; end of header
|
|
||||||
|
|
||||||
; main loop (required to redraw vectors on CRT screen)
|
db "g GCE 2016", $80
|
||||||
|
dw $F600
|
||||||
|
db $FC, $30, 33, -$2a
|
||||||
|
db "HELLO WORLD", $80
|
||||||
|
db 0
|
||||||
|
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
|
|
||||||
; recalibrate CRT, reset beam to 0,0 (center of the screen)
|
jsr $f192
|
||||||
jsr $f192 ; Wait_Recal subroutine in ROM
|
|
||||||
|
|
||||||
ldu #helloworld ; string address
|
ldu #helloworld
|
||||||
lda #10 ; Y
|
lda #10
|
||||||
ldb #-45 ; X
|
ldb #-45
|
||||||
|
|
||||||
jsr $f37a ; Print_Str_d subroutine in ROM
|
jsr $f37a
|
||||||
|
|
||||||
bra loop
|
bra loop
|
||||||
|
|
||||||
; Text data ($80 - end of line)
|
|
||||||
|
|
||||||
helloworld: db 'Hello World',$80
|
helloworld: db 'Hello World',$80
|
||||||
|
|
||||||
|
|||||||
@@ -6,45 +6,44 @@
|
|||||||
cpu 8048
|
cpu 8048
|
||||||
org 400h
|
org 400h
|
||||||
|
|
||||||
; interrupt vectors
|
|
||||||
jmp 02C3h ; selectgame (RESET)
|
|
||||||
jmp 0009h ; irq
|
|
||||||
jmp timer ; timer
|
|
||||||
jmp 001Ah ; vsyncirq
|
|
||||||
jmp start ; after selectgame
|
|
||||||
jmp 0044h ; soundirq
|
|
||||||
|
|
||||||
|
jmp 02C3h
|
||||||
|
jmp 0009h
|
||||||
|
jmp timer
|
||||||
|
jmp 001Ah
|
||||||
|
jmp start
|
||||||
|
jmp 0044h
|
||||||
timer:
|
timer:
|
||||||
ret ; no timer needed
|
ret
|
||||||
|
|
||||||
|
|
||||||
start:
|
start:
|
||||||
|
|
||||||
call 011Ch ; gfxoff
|
call 011Ch
|
||||||
|
|
||||||
mov r0,#010h ; pointer in VDC - which char to display (one of 12)
|
mov r0,#010h
|
||||||
mov r3,#40 ; x
|
mov r3,#40
|
||||||
mov r4,#100 ; y
|
mov r4,#100
|
||||||
mov r1,#hellostr & 0ffh ; string to print (should be on same 255 bytes page)
|
mov r1,#hellostr & 0ffh
|
||||||
|
|
||||||
mov r2,#11 ; string length
|
mov r2,#11
|
||||||
|
|
||||||
nextchar:
|
nextchar:
|
||||||
mov a,r1
|
mov a,r1
|
||||||
movp a,@a ; get char located at @r1
|
movp a,@a
|
||||||
mov r5,a
|
mov r5,a
|
||||||
inc r1 ; inc addr of char
|
inc r1
|
||||||
mov r6,#0eh ; white color
|
mov r6,#0eh
|
||||||
call 03EAh ; printchar bios subroutine (increases r0, r3)
|
call 03EAh
|
||||||
djnz r2,nextchar
|
djnz r2,nextchar
|
||||||
|
|
||||||
call 0127h ; gfxon (show what is written to VDC)
|
call 0127h
|
||||||
|
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
jmp loop ; just wait and do nothing
|
jmp loop
|
||||||
|
|
||||||
|
|
||||||
; 'HELLO WORLD' (ascii not supported by assembler)
|
|
||||||
hellostr:
|
hellostr:
|
||||||
db 01dh, 012h, 00eh, 00eh, 017h, 00ch, 011h, 017h, 013h, 00eh, 01ah
|
db 01dh, 012h, 00eh, 00eh, 017h, 00ch, 011h, 017h, 013h, 00eh, 01ah
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ message: .asciz "Hello World\n"
|
|||||||
.text
|
.text
|
||||||
.global main
|
.global main
|
||||||
main:
|
main:
|
||||||
mov r0, #1 @ file descriptor 1
|
mov r0, #1
|
||||||
ldr r1, =message @ load address of message
|
ldr r1, =message
|
||||||
mov r7, #4 @ system call write
|
mov r7, #4
|
||||||
swi #0 @ display message
|
swi #0
|
||||||
|
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
bx lr
|
bx lr
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
;
|
|
||||||
; hello.asm
|
|
||||||
;
|
|
||||||
; A "Hello, World!" which illustrates an Atari 2600 programming
|
; A "Hello, World!" which illustrates an Atari 2600 programming
|
||||||
; introduction talk (slides at http://slideshare.net/chesterbr).
|
; introduction talk (slides at http://slideshare.net/chesterbr).
|
||||||
;
|
;
|
||||||
@@ -13,69 +11,68 @@
|
|||||||
PROCESSOR 6502
|
PROCESSOR 6502
|
||||||
INCLUDE "vcs.h"
|
INCLUDE "vcs.h"
|
||||||
|
|
||||||
ORG $F000 ; Start of "cart area" (see Atari memory map)
|
ORG $F000
|
||||||
|
|
||||||
StartFrame:
|
StartFrame:
|
||||||
lda #%00000010 ; Vertical sync is signaled by VSYNC's bit 1...
|
lda #%00000010
|
||||||
sta VSYNC
|
sta VSYNC
|
||||||
REPEAT 3 ; ...and lasts 3 scanlines
|
REPEAT 3
|
||||||
sta WSYNC ; (WSYNC write => wait for end of scanline)
|
sta WSYNC
|
||||||
REPEND
|
REPEND
|
||||||
lda #0
|
lda #0
|
||||||
sta VSYNC ; Signal vertical sync by clearing the bit
|
sta VSYNC
|
||||||
|
|
||||||
PreparePlayfield: ; We'll use the first VBLANK scanline for setup
|
PreparePlayfield:
|
||||||
lda #$00 ; (could have done it before, just once)
|
lda #$00
|
||||||
sta ENABL ; Turn off ball, missiles and players
|
sta ENABL
|
||||||
sta ENAM0
|
sta ENAM0
|
||||||
sta ENAM1
|
sta ENAM1
|
||||||
sta GRP0
|
sta GRP0
|
||||||
sta GRP1
|
sta GRP1
|
||||||
sta COLUBK ; Background color (black)
|
sta COLUBK
|
||||||
sta PF0 ; PF0 and PF2 will be "off" (we'll focus on PF1)...
|
sta PF0
|
||||||
sta PF2
|
sta PF2
|
||||||
lda #$FF ; Playfield collor (yellow-ish)
|
lda #$FF
|
||||||
sta COLUPF
|
sta COLUPF
|
||||||
lda #$00 ; Ensure we will duplicate (and not reflect) PF
|
lda #$00
|
||||||
sta CTRLPF
|
sta CTRLPF
|
||||||
ldx #0 ; X will count visible scanlines, let's reset it
|
ldx #0
|
||||||
REPEAT 37 ; Wait until this (and the other 36) vertical blank
|
REPEAT 37
|
||||||
sta WSYNC ; scanlines are finished
|
sta WSYNC
|
||||||
REPEND
|
REPEND
|
||||||
lda #0 ; Vertical blank is done, we can "turn on" the beam
|
lda #0
|
||||||
sta VBLANK
|
sta VBLANK
|
||||||
|
|
||||||
Scanline:
|
Scanline:
|
||||||
cpx #174 ; "HELLO WORLD" = (11 chars x 8 lines - 1) x 2 scanlines =
|
cpx #174
|
||||||
bcs ScanlineEnd ; 174 (0 to 173). After that, skip drawing code
|
bcs ScanlineEnd
|
||||||
txa ; We want each byte of the hello world phrase on 2 scanlines,
|
txa
|
||||||
lsr ; which means Y (bitmap counter) = X (scanline counter) / 2.
|
lsr
|
||||||
tay ; For division by two we use (A-only) right-shift
|
tay
|
||||||
lda Phrase,y ; "Phrase,Y" = mem(Phrase+Y) (Y-th address after Phrase)
|
lda Phrase,y
|
||||||
sta PF1 ; Put the value on PF bits 4-11 (0-3 is PF0, 12-15 is PF2)
|
sta PF1
|
||||||
ScanlineEnd:
|
ScanlineEnd:
|
||||||
sta WSYNC ; Wait for scanline end
|
sta WSYNC
|
||||||
inx ; Increase counter; repeat untill we got all kernel scanlines
|
inx
|
||||||
cpx #191
|
cpx #191
|
||||||
bne Scanline
|
bne Scanline
|
||||||
|
|
||||||
Overscan:
|
Overscan:
|
||||||
lda #%01000010 ; "turn off" the beam again...
|
lda #%01000010
|
||||||
sta VBLANK ;
|
sta VBLANK
|
||||||
REPEAT 30 ; ...for 30 overscan scanlines...
|
REPEAT 30
|
||||||
sta WSYNC
|
sta WSYNC
|
||||||
REPEND
|
REPEND
|
||||||
jmp StartFrame ; ...and start it over!
|
jmp StartFrame
|
||||||
|
|
||||||
Phrase:
|
Phrase:
|
||||||
.BYTE %00000000 ; H
|
.BYTE %00000000
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01111110
|
.BYTE %01111110
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; E
|
.BYTE %00000000
|
||||||
.BYTE %01111110
|
.BYTE %01111110
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01111100
|
.BYTE %01111100
|
||||||
@@ -83,7 +80,7 @@ Phrase:
|
|||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01111110
|
.BYTE %01111110
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; L
|
.BYTE %00000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
@@ -91,14 +88,14 @@ Phrase:
|
|||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01111110
|
.BYTE %01111110
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; L
|
.BYTE %00000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01111110
|
.BYTE %01111110
|
||||||
.BYTE %00000000 ; O
|
.BYTE %00000000
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00111100
|
.BYTE %00111100
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
@@ -107,7 +104,6 @@ Phrase:
|
|||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %00111100
|
.BYTE %00111100
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; white space
|
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
@@ -115,7 +111,8 @@ Phrase:
|
|||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; W
|
.BYTE %00000000
|
||||||
|
.BYTE %00000000
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
@@ -123,7 +120,7 @@ Phrase:
|
|||||||
.BYTE %01011010
|
.BYTE %01011010
|
||||||
.BYTE %00100100
|
.BYTE %00100100
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; O
|
.BYTE %00000000
|
||||||
.BYTE %00111100
|
.BYTE %00111100
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
@@ -131,7 +128,7 @@ Phrase:
|
|||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %00111100
|
.BYTE %00111100
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; R
|
.BYTE %00000000
|
||||||
.BYTE %01111100
|
.BYTE %01111100
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
@@ -139,7 +136,7 @@ Phrase:
|
|||||||
.BYTE %01000100
|
.BYTE %01000100
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; L
|
.BYTE %00000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
@@ -147,21 +144,19 @@ Phrase:
|
|||||||
.BYTE %01000000
|
.BYTE %01000000
|
||||||
.BYTE %01111110
|
.BYTE %01111110
|
||||||
.BYTE %00000000
|
.BYTE %00000000
|
||||||
.BYTE %00000000 ; D
|
.BYTE %00000000
|
||||||
.BYTE %01111000
|
.BYTE %01111000
|
||||||
.BYTE %01000100
|
.BYTE %01000100
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000010
|
.BYTE %01000010
|
||||||
.BYTE %01000100
|
.BYTE %01000100
|
||||||
.BYTE %01111000
|
.BYTE %01111000
|
||||||
.BYTE %00000000 ; Last byte written to PF1 (important, ensures lower tip
|
.BYTE %00000000)
|
||||||
; of letter "D" won't "bleeed")
|
|
||||||
|
|
||||||
ORG $FFFA ; Cart config (so 6502 can start it up)
|
ORG $FFFA
|
||||||
|
.WORD StartFrame
|
||||||
.WORD StartFrame ; NMI
|
.WORD StartFrame
|
||||||
.WORD StartFrame ; RESET
|
.WORD StartFrame
|
||||||
.WORD StartFrame ; IRQ
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ entry .code: start
|
|||||||
|
|
||||||
segment .code
|
segment .code
|
||||||
start:
|
start:
|
||||||
mov ax, .data ; put data segment into ax
|
mov ax, .data
|
||||||
mov ds, ax ; there, I setup the DS for you
|
mov ds, ax
|
||||||
mov dx, msg ; now I give you the offset in DX. DS:DX now completed.
|
mov dx, msg
|
||||||
mov ah, 9h
|
mov ah, 9h
|
||||||
int 21h
|
int 21h
|
||||||
mov ah, 4ch
|
mov ah, 4ch
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
010 ! Hello world in Assembler for the HP-85
|
010
|
||||||
020 NAM HELLO
|
020 NAM HELLO
|
||||||
030 DEF RUNTIM
|
030 DEF RUNTIM
|
||||||
040 DEF TOKENS
|
040 DEF TOKENS
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
; hello_world.asm intel
|
|
||||||
|
|
||||||
.model small
|
.model small
|
||||||
|
|
||||||
@@ -12,7 +11,7 @@ main proc
|
|||||||
mov ax,@data
|
mov ax,@data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
|
|
||||||
; hello-world is there
|
|
||||||
mov dx,offset msg
|
mov dx,offset msg
|
||||||
mov ah,09
|
mov ah,09
|
||||||
int 21h
|
int 21h
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; 16 bit dos assembly
|
|
||||||
.model small
|
.model small
|
||||||
.stack
|
.stack
|
||||||
.data
|
.data
|
||||||
|
|||||||
@@ -19,17 +19,17 @@ bytesWritten DWORD ?
|
|||||||
|
|
||||||
.code
|
.code
|
||||||
main PROC
|
main PROC
|
||||||
push -11 ; nStdHandle (STD_OUTPUT_HANDLE)
|
push -11
|
||||||
call GetStdHandle@4
|
call GetStdHandle@4
|
||||||
|
|
||||||
push 0 ; lpReserved
|
push 0
|
||||||
push OFFSET bytesWritten ; lpNumberOfCharsWritten
|
push OFFSET bytesWritten
|
||||||
push LENGTHOF msg - 1 ; nNumberOfCharsToWrite
|
push LENGTHOF msg - 1
|
||||||
push OFFSET msg ; *lpBuffer
|
push OFFSET msg
|
||||||
push eax ; hConsoleOutput
|
push eax
|
||||||
call WriteConsoleA@20
|
call WriteConsoleA@20
|
||||||
|
|
||||||
push 0 ; uExitCode
|
push 0
|
||||||
call ExitProcess@4
|
call ExitProcess@4
|
||||||
main ENDP
|
main ENDP
|
||||||
END main
|
END main
|
||||||
|
|||||||
@@ -15,19 +15,19 @@ bytesWritten DWORD ?
|
|||||||
|
|
||||||
.code
|
.code
|
||||||
main PROC
|
main PROC
|
||||||
sub rsp, 5 * 8 ; reserve shadow space
|
sub rsp, 5 * 8
|
||||||
|
|
||||||
mov rcx, -11 ; nStdHandle (STD_OUTPUT_HANDLE)
|
mov rcx, -11
|
||||||
call GetStdHandle
|
call GetStdHandle
|
||||||
|
|
||||||
mov rcx, rax ; hConsoleOutput
|
mov rcx, rax
|
||||||
lea rdx, msg ; *lpBuffer
|
lea rdx, msg
|
||||||
mov r8, LENGTHOF msg - 1 ; nNumberOfCharsToWrite
|
mov r8, LENGTHOF msg - 1
|
||||||
lea r9, bytesWritten ; lpNumberOfCharsWritten
|
lea r9, bytesWritten
|
||||||
mov QWORD PTR [rsp + 4 * SIZEOF QWORD], 0 ; lpReserved
|
mov QWORD PTR [rsp + 4 * SIZEOF QWORD], 0
|
||||||
call WriteConsoleA
|
call WriteConsoleA
|
||||||
|
|
||||||
mov rcx, 0 ; uExitCode
|
mov rcx, 0
|
||||||
call ExitProcess
|
call ExitProcess
|
||||||
main ENDP
|
main ENDP
|
||||||
END
|
END
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
hw: .asciiz "Hello World"
|
hw: .asciiz "Hello World"
|
||||||
.text
|
.text
|
||||||
main:
|
main:
|
||||||
la $a0, hw #load the address of hw into $a0
|
la $a0, hw
|
||||||
li $v0, 4 #load 4 into $v0
|
li $v0, 4
|
||||||
syscall #perform the print_string syscall
|
syscall
|
||||||
li $v0, 10 #load 10 into $v0
|
li $v0, 10
|
||||||
syscall #perform the exit syscall
|
syscall
|
||||||
|
|||||||
@@ -1,31 +1,26 @@
|
|||||||
section .text
|
section .text
|
||||||
global _start ;must be declared for linker (ld)
|
global _start
|
||||||
|
|
||||||
_syscall:
|
_syscall:
|
||||||
int 0x80 ;system call
|
int 0x80
|
||||||
ret
|
ret
|
||||||
|
|
||||||
_start: ;tell linker entry point
|
_start:
|
||||||
|
|
||||||
push dword len ;message length
|
push dword len
|
||||||
push dword msg ;message to write
|
push dword msg
|
||||||
push dword 1 ;file descriptor (stdout)
|
push dword 1
|
||||||
mov eax,0x4 ;system call number (sys_write)
|
mov eax,0x4
|
||||||
call _syscall ;call kernel
|
call _syscall
|
||||||
|
|
||||||
;the alternate way to call kernel:
|
|
||||||
;push eax
|
|
||||||
;call 7:0
|
|
||||||
|
|
||||||
add esp,12 ;clean stack (3 arguments * 4)
|
add esp,12
|
||||||
|
|
||||||
push dword 0 ;exit code
|
push dword 0
|
||||||
mov eax,0x1 ;system call number (sys_exit)
|
mov eax,0x1
|
||||||
call _syscall ;call kernel
|
call _syscall
|
||||||
|
|
||||||
;we do not return from sys_exit,
|
|
||||||
;there's no need to clean stack
|
|
||||||
section .data
|
section .data
|
||||||
|
|
||||||
msg db "Hello World",0xa ;our string
|
msg db "Hello World",0xa
|
||||||
len equ $ - msg ;length of our string
|
len equ $ - msg
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
section .text
|
section .text
|
||||||
global _start ;must be declared for linker (ld)
|
global _start
|
||||||
|
|
||||||
_start: ;tell linker entry point
|
_start:
|
||||||
|
|
||||||
xor ebx,ebx ;ebx=0
|
xor ebx,ebx
|
||||||
mov ecx,msg ;address of message to write
|
mov ecx,msg
|
||||||
lea edx,[ebx+len] ;message length
|
lea edx,[ebx+len]
|
||||||
lea eax,[ebx+4] ;system call number (sys_write)
|
lea eax,[ebx+4]
|
||||||
inc ebx ;file descriptor (stdout)
|
inc ebx
|
||||||
int 0x80 ;call kernel
|
int 0x80
|
||||||
|
|
||||||
xor eax, eax ;set eax=0
|
xor eax, eax
|
||||||
inc eax ;system call number (sys_exit)
|
inc eax
|
||||||
int 0x80 ;call kernel
|
int 0x80
|
||||||
|
|
||||||
section .rodata
|
section .rodata
|
||||||
|
|
||||||
msg db 'Hello World',0xa ;our string
|
msg db 'Hello World',0xa
|
||||||
len equ $ - msg ;length of our string
|
len equ $ - msg
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
section .rodata
|
section .rodata
|
||||||
msg db "Hello World", 0xA ; String to print
|
msg db "Hello World", 0xA
|
||||||
len equ $- msg ; Length of string
|
len equ $- msg
|
||||||
|
|
||||||
section .text
|
section .text
|
||||||
global _start ; Specify entry point to linker
|
global _start
|
||||||
|
|
||||||
_start:
|
_start:
|
||||||
mov eax, 1 ; System call ID (sys_write)
|
mov eax, 1
|
||||||
mov edi, eax ; File descriptor (stdout)
|
mov edi, eax
|
||||||
mov esi, msg ; Text to print
|
mov esi, msg
|
||||||
mov edx, len ; Length of text to print
|
mov edx, len
|
||||||
syscall ; Call kernel
|
syscall
|
||||||
|
|
||||||
mov eax, 60 ; System call ID (sys_exit)
|
mov eax, 60
|
||||||
xor edi, edi ; Error code (EXIT_SUCCESS)
|
xor edi, edi
|
||||||
syscall ; Call kernel
|
syscall
|
||||||
|
|||||||
@@ -2,13 +2,13 @@ global start
|
|||||||
|
|
||||||
section .text
|
section .text
|
||||||
start:
|
start:
|
||||||
mov rax, 0x2000004 ; write
|
mov rax, 0x2000004
|
||||||
mov rdi, 1 ; stdout
|
mov rdi, 1
|
||||||
mov rsi, msg
|
mov rsi, msg
|
||||||
mov rdx, msg.len
|
mov rdx, msg.len
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
mov rax, 0x2000001 ; exit
|
mov rax, 0x2000001
|
||||||
mov rdi, 0
|
mov rdi, 0
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; "Hello World" in Motorola 68000 machine language, for AmigaOS
|
|
||||||
|
|
||||||
ExecBase = 4
|
ExecBase = 4
|
||||||
OpenLibrary = -552
|
OpenLibrary = -552
|
||||||
@@ -7,7 +7,6 @@ PutStr = -948
|
|||||||
|
|
||||||
section "main", code
|
section "main", code
|
||||||
|
|
||||||
; open "dos.library"
|
|
||||||
|
|
||||||
move.l ExecBase, a6
|
move.l ExecBase, a6
|
||||||
lea lib, a1
|
lea lib, a1
|
||||||
@@ -15,12 +14,10 @@ PutStr = -948
|
|||||||
jsr (OpenLibrary, a6)
|
jsr (OpenLibrary, a6)
|
||||||
move.l d0, a6
|
move.l d0, a6
|
||||||
|
|
||||||
; print the message
|
|
||||||
|
|
||||||
move.l #msg, d1
|
move.l #msg, d1
|
||||||
jsr (PutStr, a6)
|
jsr (PutStr, a6)
|
||||||
|
|
||||||
; close the library, and exit with code 0
|
|
||||||
|
|
||||||
move.l a6, a1
|
move.l a6, a1
|
||||||
move.l ExecBase, a6
|
move.l ExecBase, a6
|
||||||
|
|||||||
@@ -9,14 +9,12 @@
|
|||||||
|
|
||||||
WRKSP EQU >8300
|
WRKSP EQU >8300
|
||||||
|
|
||||||
VDPWD EQU >8C00 * VDP RAM write data
|
VDPWD EQU >8C00
|
||||||
VDPWA EQU >8C02 * VDP RAM read/write address
|
VDPWA EQU >8C02
|
||||||
|
|
||||||
|
|
||||||
START LIMI 0 * disable interrupts
|
START LIMI 0
|
||||||
LWPI WRKSP * set default workspace
|
LWPI WRKSP
|
||||||
|
|
||||||
* set VDP RAM start address (low and high byte)
|
|
||||||
|
|
||||||
LI R0,>0000
|
LI R0,>0000
|
||||||
ORI R0,>4000
|
ORI R0,>4000
|
||||||
@@ -25,20 +23,21 @@ START LIMI 0 * disable interrupts
|
|||||||
SWPB R0
|
SWPB R0
|
||||||
MOVB R0,@VDPWA
|
MOVB R0,@VDPWA
|
||||||
|
|
||||||
LI R1,HELLOWORLD * ascii string address
|
LI R1,HELLOWORLD
|
||||||
LI R2,12 * total chars
|
LI R2,12
|
||||||
|
|
||||||
NEXTCHAR
|
NEXTCHAR
|
||||||
MOVB *R1+,@VDPWD * put next char on screen
|
MOVB *R1+,@VDPWD
|
||||||
DEC R2
|
DEC R2
|
||||||
JNE NEXTCHAR
|
JNE NEXTCHAR
|
||||||
|
|
||||||
LOOPBACK
|
LOOPBACK
|
||||||
JMP LOOPBACK * stop and do nothing
|
JMP LOOPBACK
|
||||||
|
|
||||||
|
|
||||||
HELLOWORLD
|
HELLOWORLD
|
||||||
TEXT 'HELLO WORLD' * string data
|
TEXT 'HELLO WORLD'
|
||||||
|
|
||||||
BYTE 0
|
BYTE 0
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|||||||
@@ -154,9 +154,9 @@ Make sure to see [contributing.md](/contributing.md) for instructions on contrib
|
|||||||
* [Assembler Z80 zxspectrum](a/Assembler%20Z80%20zxspectrum.asm)
|
* [Assembler Z80 zxspectrum](a/Assembler%20Z80%20zxspectrum.asm)
|
||||||
* [ATS2](a/ATS2.dats)
|
* [ATS2](a/ATS2.dats)
|
||||||
* [Attache](a/Attache.%40)
|
* [Attache](a/Attache.%40)
|
||||||
* [AutoLISP](a/AutoLISP.lsp)
|
|
||||||
* [AutoHotKey](a/AutoHotKey.ahk)
|
* [AutoHotKey](a/AutoHotKey.ahk)
|
||||||
* [AutoIt](a/AutoIt.au3)
|
* [AutoIt](a/AutoIt.au3)
|
||||||
|
* [AutoLISP](a/AutoLISP.lsp)
|
||||||
* [Avisynth](a/Avisynth.avs)
|
* [Avisynth](a/Avisynth.avs)
|
||||||
* [Awful](a/Awful.yuk)
|
* [Awful](a/Awful.yuk)
|
||||||
* [AWK](a/AWK.awk)
|
* [AWK](a/AWK.awk)
|
||||||
@@ -516,6 +516,7 @@ Make sure to see [contributing.md](/contributing.md) for instructions on contrib
|
|||||||
* [Nu](n/Nu.nu)
|
* [Nu](n/Nu.nu)
|
||||||
* [NWScript](n/NWScript.nss)
|
* [NWScript](n/NWScript.nss)
|
||||||
* [NXC](n/NXC.nxc)
|
* [NXC](n/NXC.nxc)
|
||||||
|
* [o:XML](o/o%3AXML)
|
||||||
* [Oberon 2](o/Oberon%202.obn)
|
* [Oberon 2](o/Oberon%202.obn)
|
||||||
* [Oberon](o/Oberon.o)
|
* [Oberon](o/Oberon.o)
|
||||||
* [Obix](o/Obix.osc)
|
* [Obix](o/Obix.osc)
|
||||||
@@ -534,7 +535,6 @@ Make sure to see [contributing.md](/contributing.md) for instructions on contrib
|
|||||||
* [Oracle SQL](o/Oracle%20SQL.sql)
|
* [Oracle SQL](o/Oracle%20SQL.sql)
|
||||||
* [Orc](o/Orc.orc)
|
* [Orc](o/Orc.orc)
|
||||||
* [OX](o/OX.oz)
|
* [OX](o/OX.oz)
|
||||||
* [o:XML](o/o:XML)
|
|
||||||
* [Parenthetic](p/Parenthetic.p)
|
* [Parenthetic](p/Parenthetic.p)
|
||||||
* [Parser](p/Parser.p)
|
* [Parser](p/Parser.p)
|
||||||
* [Pascal](p/Pascal.p)
|
* [Pascal](p/Pascal.p)
|
||||||
|
|||||||
Reference in New Issue
Block a user