NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF bin/uname
*--------------------------------------
				.INB inc/macros.i
				.INB inc/a2osx.i
				.INB inc/mli.e.i
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
ZPPtr1			.BS 2
ZPPtr2			.BS 2

Index			.BS 1
Count			.BS 1

hFILE			.BS 1

bHostName		.BS 1

bMachineType	.BS 1
bCPUType		.BS 1
bCPUSpeed		.BS 1
bAltCPU			.BS 1
bKernelVersion	.BS 1
bKernelBuild	.BS 1
bKernelMode		.BS 1
bKernelHz		.BS 1
bFSID			.BS 1
ZS.END			.ED
*--------------------------------------
*			File Header (16 Bytes)
*--------------------------------------
CS.START		cld
				jmp (.1,x)
				.DA #$61				6502,Level 1 (65c02)
				.DA #1					BIN Layout Version 1
				.DA #0					S.PS.F.EVENT
				.DA #0
				.DA CS.END-CS.START		Code Size (without Constants)
				.DA DS.END-DS.START		Data SegmentSize
				.DA #32					Stack Size
				.DA #ZS.END-ZS.START	Zero Page Size
				.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.DOEVENT
				.DA	CS.QUIT
L.MSG.USAGE		.DA MSG.USAGE
L.MSG.CRLF		.DA MSG.CRLF
L.ETCHOSTNAME	.DA ETCHOSTNAME
L.ETCVERSION	.DA ETCVERSION
L.TYPES			.DA TYPE.UNKNOWN
				.DA TYPE.IIe
				.DA TYPE.IIc
				.DA TYPE.IIgs
L.SUBT.ROM		.DA SUBT.ROM
L.SUBT.IIE		.DA SUBT.ENH
				.DA SUBT.LCCARD
L.CPUS			.DA CPU.65C02
				.DA CPU.65R02
				.DA CPU.65816
L.CPU.SPEED		.DA CPU.SPEED
L.KERNEL.VER	.DA KERNEL.VER
L.KERNEL.MODES	.DA	KERNEL.POLLING
				.DA	KERNEL.IRQ
				.DA	KERNEL.PREEMPT
L.FSID			.DA FSID.PRODOS
				.DA FSID.FX
L.KERNEL.HZ		.DA KERNEL.HZ				
				.DA 0
*--------------------------------------
CS.INIT			clc
				rts
*--------------------------------------
CS.RUN			ldy #S.PS.ARGC
				lda (pPS),y
				beq .8

.1				inc Index
				lda Index
				>SYSCALL ArgV
				bcs CS.RUN.PRINT

				>STYA ZPPtr1
				lda (ZPPtr1)
				cmp #'-'
				bne .99

				ldy #1
				lda (ZPPtr1),y
				beq .99

				jsr CS.RUN.CheckOpt
				bcc .1

.99				>LDYA L.MSG.USAGE
				>SYSCALL PutS

				lda #E.SYN
				sec
				rts

.8				lda #$ff
				sta bKernelVersion
				sta bKernelBuild
				sta bKernelMode
				sta bMachineType
				sta bCPUType
				sta bCPUSpeed
				sta bFSID
*--------------------------------------
CS.RUN.PRINT	bit bHostName
				bpl .1

				jsr CS.RUN.GetHostName
				bcs .1

				>LDYA pData
				jsr CS.RUN.PRINTYA

.1				bit bMachineType
				bpl .2

				jsr CS.RUN.TYPESUBT

.2				bit bCPUType
				bpl .3

				jsr CS.RUN.CPUType

.3				bit bCPUSpeed
				bpl .4

				jsr CS.RUN.CPUSpeed

.4				bit bAltCPU
				bpl .5





.5				bit bKernelVersion
				bpl .6

				jsr CS.RUN.KVER

.6				bit bKernelBuild
				bpl .7

				jsr CS.RUN.GetBuild
				bcs .7

				>LDYA pData
				jsr CS.RUN.PRINTYA

.7				bit bKernelMode
				bpl .8

				jsr CS.RUN.KMode

.8				bit bKernelHz
				bpl .9

				jsr CS.RUN.HZ

.9				bit bFSID
				bpl .10

				jsr CS.RUN.FSID
				
				
				
				
				
.10				>PUSHW L.MSG.CRLF
				>PUSHBI 0
				>SYSCALL PrintF


				lda #0
				sec
				rts
*--------------------------------------
CS.RUN.GetHostName
				>LDYA L.ETCHOSTNAME
				bra CS.RUN.GetFile

CS.RUN.GetBuild	>LDYA L.ETCVERSION

CS.RUN.GetFile	stz hFILE

				>PUSHYA
				>PUSHBI	O.RDONLY
				>PUSHBI 0

				sta (pData)

				>PUSHWZ
				>SYSCALL FOpen
				bcs .9

				sta hFILE

				>LEA.G FGetSBuf
				>STYA ZPPtr1

.1				>PUSHB hFILE
				>PUSHW ZPPtr1
				>PUSHWI 64
				>SYSCALL FGetS
				bcs .8

				lda (ZPPtr1)
				beq .1

				cmp #'#'
				beq .1

				ldy #$ff

.2				iny
				lda (ZPPtr1),y
				sta (pData),y
				bne .2

.8				clc

.9				php
				pha

				lda hFILE
				beq .90

				>SYSCALL FClose

.90				pla
				plp
				rts
*--------------------------------------
CS.RUN.TYPESUBT	lda A2osX.HWT
				asl
				tax

				>LDYA L.TYPES,x
				jsr CS.RUN.PRINTYA

				lda A2osX.HWT
				beq .8					Unknown

				cmp #A2osX.HWT.IIc
				bcc .1

				>PUSHW L.SUBT.ROM		//c & IIgs
				>PUSHB A2osX.HWSubT
				>PUSHBI 1
				>SYSCALL PrintF
				rts

.1				lda A2osX.HWSubT		//e
				beq .8

				asl
				tax

				>PUSHW L.SUBT.IIE-2,x
				>PUSHBI 0
				>SYSCALL PrintF

.8				rts
*--------------------------------------
CS.RUN.HZ		>PUSHW L.KERNEL.HZ
				>PUSHB A2osX.HZ
				>PUSHBI 1
				jmp CS.RUN.PRINTF
*--------------------------------------
CS.RUN.FSID		ldx #0
				bit A2osX.FSID
				bpl .1
				
				inx
				inx
				
.1				>LDYA L.FSID,x		
				jmp CS.RUN.PRINTYA	
*--------------------------------------
CS.RUN.KVER		>PUSHW L.KERNEL.VER
				>PUSHW A2osX.KVER
				>PUSHBI 2
				jmp CS.RUN.PRINTF
*--------------------------------------
CS.RUN.KMode	ldx #0
				bit A2osX.IRQMode
				bpl .1

				inx
				inx
				bit A2osX.F
				bvc .1

				inx
				inx

.1				>LDYA L.KERNEL.MODES,x
				jmp CS.RUN.PRINTYA
*--------------------------------------
CS.RUN.CPUSpeed	>PUSHW L.CPU.SPEED
				>PUSHW A2osX.CPUSPEED
				>PUSHBI 2
				jmp CS.RUN.PRINTF
*--------------------------------------
CS.RUN.CPUType	lda A2osX.CPUTYPE

				asl
				and #$0F
				tax

				>LDYA L.CPUS-2,x
*--------------------------------------
CS.RUN.PRINTYA	>PUSHYA
				>PUSHBI 0

CS.RUN.PRINTF	lda Count
				beq .1

				lda #C.SPACE
				>SYSCALL PutChar

.1				>SYSCALL PrintF

				inc Count

CS.DOEVENT		sec
				rts
*--------------------------------------
CS.QUIT
.8				clc
				rts
*--------------------------------------
CS.RUN.CheckOpt	ldy #1
				lda (ZPPtr1),y

				ldx #OptionVars-OptionList-1

.2				cmp OptionList,x
				beq .3

				dex
				bpl .2

				sec
				rts

.3				ldy OptionVars,x
				ldx #$ff
				stx 0,y
				clc
				rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList		.AS "HhMmCcSsAaVvBbKkZzXx"
OptionVars		.DA #bHostName,#bHostName
				.DA #bMachineType,#bMachineType
				.DA #bCPUType,#bCPUType
				.DA #bCPUSpeed,#bCPUSpeed
				.DA #bAltCPU,#bAltCPU
				.DA #bKernelVersion,#bKernelVersion
				.DA #bKernelBuild,#bKernelBuild
				.DA #bKernelMode,#bKernelMode
				.DA #bKernelHz,#bKernelHz
				.DA #bFSID,#bFSID
*--------------------------------------
MSG.USAGE		.CS "Usage : UNAME\r\n"
				.CS "   -H : Hostname\r\n"
				.CS "   -M : Machine Type/SubType\r\n"
				.CS "   -C : CPU Type\r\n"
				.CS "   -S : CPU Speed\r\n"
				.CS "   -A : Alternate CPU\r\n"
				.CS "   -V : Kernel Version\r\n"
				.CS "   -B : Kernel Build\r\n"
				.CS "   -K : Kernel Mode\r\n"
				.CS "   -Z : Kernel Timing\r\n"
				.CS "   -X : ProDOS | FX"
MSG.CRLF		.CZ "\r\n"
*--------------------------------------
ETCHOSTNAME		.AZ "${ROOT}etc/hostname"
ETCVERSION		.AZ "${ROOT}etc/version"
*--------------------------------------
TYPE.UNKNOWN	.AZ "Unknown_HW"
TYPE.IIe		.AZ "Apple//e"
TYPE.IIc		.AZ "Apple//c"
TYPE.IIgs		.AZ "AppleIIgs"
SUBT.ROM		.AZ "_ROM%h"
SUBT.ENH		.AZ "_Enh"
SUBT.LCCARD		.AZ "_LCCard"
CPU.65C02		.AZ "65c02"
CPU.65R02		.AZ "65r02"
CPU.65816		.AZ "65816"
CPU.SPEED		.AZ "%d.%02dmhz"
KERNEL.VER		.AZ "A2osX_%d.%02d"
KERNEL.POLLING	.AZ "Polling_Mode"
KERNEL.IRQ		.AZ "IRQ_Mode"
KERNEL.PREEMPT	.AZ "Preemptive_Mode"
KERNEL.HZ		.AZ "%d0hz"
FSID.PRODOS		.AZ "ProDOS"
FSID.FX			.AZ "FX"
*--------------------------------------
				.DUMMY
				.OR 0
DS.START		.BS 65
FGetSBuf		.BS 65
DS.END			.ED
*--------------------------------------
MAN
SAVE usr/src/bin/uname.s
ASM
