지구셀 WASM — 임의 좌표 입력 경로 추가
개요
기존 지구셀.wasm은 main()을 한 번 실행해 서울 하드코딩 좌표만 검증 가능했음. wasm_in 버퍼 직렬화(Method A)로 브라우저가 임의 (lat,lon,alt,depth)를 WASM(트릿 VM)에 넘겨 셀번호열을 계산하게 함.
방법 선택: Method A (wasm_in 버퍼)
- platform_wasm.c에 이미 wasm_in 버퍼 + wasm_set_input() export + rt_getchar() 훅이 완비됨
- 한선씨 입력() opcode(case 325)가 rt_getchar() → wasm_in 을 읽음
- 새 진입점 한선씨 파일이 4줄(lat/lon/alt/depth)을 입력()으로 읽어 트릿셀_인코딩() 호출
무엇을 했는지
신규 파일
/Users/ef/CrownyOS/crownyc/libs/지구셀_입력.한선 — 임의 좌표 WASM 진입점/Users/ef/CrownyOS/시작화면/지구셀.wasm — 새 WASM (115,973 bytes, 지구셀_입력.한선 빌드)수정 파일
/Users/ef/CrownyOS/시작화면/geocell-wasm.js — encodeWASM() 추가검증 결과 (WASM vs JS 일치표)
5개 도시 × 깊이 1~8 = 40건 전체 PASS.
| 도시 | 깊이1 | 깊이2 | 깊이3 | 깊이4 | 깊이5 | 깊이6 | 깊이7 | 깊이8 |
|---|---|---|---|---|---|---|---|---|
| 서울 | 24 | 4 | 16 | 1 | 10 | 1 | 13 | 25 |
| 뉴욕 | 18 | 7 | 13 | 16 | 25 | 13 | 13 | 8 |
| 도쿄 | 24 | 4 | 7 | 25 | 16 | 25 | 5 | 2 |
| 런던 | 21 | 13 | 4 | 4 | 22 | 4 | 1 | 8 |
| 시드니 | 6 | 25 | 19 | 16 | 4 | 22 | 7 | 19 |
브라우저 통합 스니펫
html<script src="geocell.js"></script>
<script src="geocell-wasm.js"></script>
<script>
GeoCell.ready.then(() => {
// WASM 우선 (실패 시 JS 폴백 자동)
const cells = GeoCell.encode(37560000, 126990000, 0, 6);
// cells = [24, 4, 16, 1, 10, 1]
const addr = cells.map(GeoCell.cellChar).join('');
// addr = "UEQBKB"
});
</script>
트릿 실행 성격
- WASM 내부: toau2c가 TOAU(4상균형3진 ISA729 기계어)를 C로 트랜스파일
- runtime_mcu.c의 트릿 VM이 큐브(27트릿) 단위 연산 수행
- 나눗셈은 균형3진 자연반올림(cube_divmod), 논리는 Kleene 3값
- 트릿 테이블(CUBES[1341*27])이 WASM 선형메모리에 상주
잔여 이슈
- 없음 (JS 폴백 포함 완전 동작)
- 깊이 >8 미테스트 (지구셀.한선 한계 없음, 실용 최대 깊이 ~12)
- 음수 경도(뉴욕 등) 정상 동작 확인됨